Как создать библиотеку python примеры
Перейти к содержимому

Как создать библиотеку python примеры

  • автор:

Как я писал библиотеку на Python

Для того чтобы написать библиотеку прежде вам нужно пройти 9 кругов ада. Для начала хотелось бы сказать , что я написал всего 1 библиотеку и хотел бы поделится опытом, ведь все что я нашел в интернете на английском, либо оно работает через раз.

Шаг 1. Пишем функционал, который нам нужен

Для примера я буду использовать Pycharm (я пробовал Github , но там все ломается из-за библиотек). Мы будем писать функцию перевода числа А в систему счисления B из системы счисления C.

Создаем файл.py и пишем нашу функцию, так же создаем файл __init__.py , я так и не понял зачем он нужен, но создаем и больше ничего с ним делать не нужно ( оставляем пустым).

Шаг 2. Создание одной директории для функций нашей библиотки

Далее помещам эти 2 файла в одну папку.

Шаг 3. Создание и настройка setup.py

Создаем файл setup.py

Не обращайте внимания что он находится в папке venv, будем считать что он находится в общей папке проекта.

Скачиваем библиотку setuptools c помощью команды в консоль.

pip install setuptools

У меня библиотке уже скачена так что ничего не произошло.

from setuptools import setup setup( name='num_system', version='0.0.2', description='Перевод числа а в с.с. б из с.с. с', license='MIT', packages=['num_system'], author='Dimitry K', author_email='Твой меил', keywords=['sis'], url='https://github.com' )

В setup.py мы расписываем информацию о нашей библиотке.

Шаг 4. Упаковка

На данный момент мы готовы начать упаковку с помощью setuptools , которую мы установили выше.Далее будет очень много умных и возможно непонятных слов, если не понимаете особо не задумывайтесь и просто сделайте как написано ))).

Чтобы сделать это и создать файл source distribution , в корневой папке нашего проекта мы вызываем наш setup.py из командной строки, указав, что мы хотим sdist

Пишем это в консольную строку

python setup.py sdist

Это создаст наш дистрибутив и информацию о яйцах, и в результате получится такая структура папок с нашим пакетом в dist

Теперь у мы готовы упаковке нашей библиотеки.

Это тоже пишем в консольную строку

pip install ./dist/hellostackoverflow-0.0.1.tar.gz

Шаг 5. Загружаем нашу библиотеку на Pypi

Если вы не очень понимаете что такое Pypi , то это та самая штука благодаря которой вы можете уставливать библиотеки с помощью команды pip install name_lib

В очередной раз устанавливаем библиотку

pip install twine

Эта библиотека позволяет загрузить нашу библиотеку.

В интернете про это очень много умного, но вряд ли вы пойдете читать это так , что кратенько скажу о том , что существует TestPypi и просто Pypi , как вы наверное догодались первое нужно для тестов. Но мы не ищем легкий путей поэтому тестированием заниматься не будем( ниже оставлю способ загрузки и на TestPypi так и просто на Pypi, но стоит помнить, что и там , и там нужно регистриваться и аккаунты там разные)

Загрузка на TestPypi, пишем в консоль

twine upload --repository-url https://test.pypi.org/legacy/ dist/* pip install --index-url https://test.pypi.org/simple/ hellostackoverflow

У нас запросят логин, а потом пароль

У меня это работала максильно криво и после ввода логина все ломалось выдавало ошибку ломалась библиотка и пароль было невозможно ввести, для решения это проблемы я прошерстил интеренет, но ничего не нашел сел читать официальные руководсвтва на английском и я вообще не понял как это работает, но создаем API токен в настройках аккаунта на TestPypi и вместо логина вводим __token__ , потом копируем длинный ключ к токену может запросить ,а может и нет ну и наша библиокта магическим способом загружается на сайт.

Для загрузки на Pypi пишем в консоль

twine upload dist/*

Повторяем все как в TestPypi и тадам , вы невероятны , у вас получилось загрузить библиотку , которую вы можете скачать и использовать

Есть небольшой минус

import num_system.num_system num_system.num_system.ns(33)

Для того чтобы использовать библиотку нам нужно написать ее название 2 раза , я думаю это из-за того, что мы поместили наши файлы в отдельную папку.

Итог

Поздравляю вы создали свою библиотеку, криво, косо , но все же создали и можете загружать ее. Если хотите разобраться в теме получше советую почитать

Программирование аркадных игр
и обучение информатике

Copyright © 2017
English version by Paul Vincent Craven
Spanish version by Antonio Rodríguez Verdugo
Russian version by Vladimir Slav
Turkish version by Güray Yildirim
Portuguese version by Armando Marques Sobrinho and Tati Carvalho
Dutch version by Frank Waegeman
Hungarian version by Nagy Attila
Finnish version by Jouko Järvenpää
French version by Franco Rossi
Korean version by Kim Zeung-Il
Chinese version by Kai Lin

Создание библиотеки Python: полный гайд

Это моя первая статья на Хабр’е и в ней я вам расскажу о том, как создать свою библиотеку Python и загрузить её на PyPi. Давайте начнём.

Капельку определений

PyPI — каталог программного обеспечения, написанного на языке программирования Python. Фактически это хранилище открытых библиотек для языка Python. Каждый может скачать и использовать библиотеку или создать и загрузить свою. По состоянию на февраль 2020 года содержит более 216 000 пакетов.

Каждый раз, когда вы используете команду pip install вы загружаете модуль с PyPi. Ок, я думаю, что с этим разобрались, идем дальше.

Для чего вам нужна своя библиотека?

  • Во-первых, во время создания собственной Python библиотеки вы можете получить опыт, который может пригодится вам в дальнейшем.
  • Во-вторых, вы можете поместить в библиотеку только нужные вам функции, которые могут облегчить жизнь вам и возможно другим программистам.
  • В-третьих, это весело и интересно.

Что вам нужно для создания библиотеки?

  • Код с функциями, которые вы планируете использовать.
  • Набор пакетов для создания и публикации (setuptools, wheel и twine).
  • Аккаунт PyPI (и его API токен — опционально, но об этом позже).
  • Желание и терпение.

Подготовка

Ок, мы разобрались с тем, что нам нужно для создания библиотеки, теперь давайте по порядку, начнём с кода и его грамотного оформления.

Для начала, после того как у вас появилась идея, реализуйте всё в отдельном файле и уже потом разбейте на соответствующую структуру (об этом позже). Для примера я буду использовать код класса быстрого взаимодействия с файлами и библиотеку PyDeepLib (возможно позже я напишу об этом статью). Вы можете установить каждую из библиотек командами pip install PyDeepLib и pip install speedfile соответственно. Проекты так же доступны на GitHub (PyDeepLib, speedfile).

Итак, давайте начнём с установки необходимых нам библиотек. Откройте PyCharm (я рекомендую вам использовать именно его, но если у вас его нет, то можете использовать любой другой редактор кода). Создайте новый проект с виртуальным окружением и установите пакеты о которых говорилось раньше ( setuptools , wheel и twine ), используя команду pip install setuptools wheel twine.

Теперь создадим корневую папку для нашего проекта, а в ней файлы setup.py , setup.cfg и папку с таким же названием как корневая.

Файлы нашего проекта на этом этапе должны выглядеть вот так:

Файлы проекта

Как вы можете заметить я поместил все модули проекта в папку PyDeepLib, её название обязательно должно совпадать с корневой.

Регистрация на PyPi

Я не очень хочу подробно на этом останавливаться, но я это сделаю:

Для регистрации на PyPi вам нежно перейти на сайт pypi.org и нажать на кнопку зарегистрироваться:

pypi.org

После этого все стандартно:

Имя, почта, username и пароль. Я думаю вы с этим справитесь.

Файлы setup.py и setup.cfg

Теперь займёмся кодом, который будет устанавливать нашу библиотеку. Для начала откройте файл setup.py . Теперь напишем в него такой код:

from setuptools import setup, find_packages def readme(): with open('README.md', 'r') as f: return f.read() setup( name='speedfile', version='0.0.1', author='yarik_g', author_email='example@gmail.com', description='This is the simplest module for quick work with files.', long_description=readme(), long_description_content_type='text/markdown', url='your_url', packages=find_packages(), install_requires=['requests>=2.25.1'], classifiers=[ 'Programming Language :: Python :: 3.11', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent' ], keywords='files speedfiles ', project_urls=< 'GitHub': 'your_github' >, python_requires='>=3.6' )

Итак, сначала мы создаём функцию readme , она нужна для чтения README.md файла (я расскажу как создать его максимально быстро и просто позже). И затем мы вызываем функцию setup , в которую нам надо передать некоторое число параметров, о них поговорим подробнее:

  • name — название вашей библиотеки.
  • version — версия. Когда будете обновлять библиотеку, версию обязательно надо изменить.
  • author — автор проекта
  • author_email — электронная почта (желательно та, на которую регистрировали аккаунт на PyPi).
  • description — короткое описание.
  • long_description — подробное описание пакета. В данном случае получение содержимого файла README.md.
  • long_description_content_type — разметка, используемая в подробном описании. У нас — markdown.
  • url — ссылка на страницу пакета. Я там указал ссылку на GitHub проекта.
  • packages — список пакетов, которые должны опубликоваться. Для удобства я использовал функцию find_packages.
  • install_requires — дополнительные библиотеки, которые будут установлены вместе с пакетом.
  • classifiers — метаданные о пакете.
  • keywords — ключевые слова (через пробел).
  • project_urls — дополнительные ссылки пакета.
  • python_requires — требуемая версия Python.

Отлично, надеюсь, что с этом мы разобрались. Теперь надо отредактировать файл setup.cfg . Если коротеничко, открываем его и вставляем это:

[egg_info] tag_build = tag_date = 0

В нашем случае проект очень простой и не требует никакой дополнительной конфигурации.

Основные файлы

Итак, давайте снова вернёмся к файлам проекта PyDeepLib, и рассмотрим устройство файлов модуля.

Ещё раз файлы проекта.

В папке с кодом проекта обязательно должен быть файл с названием __init__.py . Система ищет его по умолчанию и в нём обычно просто импортируют остальные модули. Вот пример того, как это может выглядеть:

Пример файла инициализации проекта

Как видите в нём почти нет кода, только import’ы, весь остальной код же разбит по отдельным файлам. Это намного удобнее чем держать весь код в одном файле, однако к примеру в проекте speedfile весь код располагался в этом основном файле, но там он был небольшим и запутаться там было сложно:

Фрагмент файла инициализации из speedfile

Я думаю, что это всё что надо знать про разбиение кода на модули.

Создание README файла. Красиво и быстро.

У каждой библиотеки должна быть своя документация или хотя-бы описание. Обычно для этого используют README.md файлы. Логично предположить, что для полноты картины нам тоже следует сделать такой файл для библиотеки. Для создания .md файла мы будем использовать редактор markdown файлов, с говорящим названием MarkDownPad2.

Итак, для начало надо скачать редактор (при желании этот пункт можно пропустить. Вы можете редактировать .md файлы прямо в PyCharm или в любом текстовом редакторе, сохранив файл с соответствующим расширением).

Переходим на сайт markdownpad.com и видим, что существует две версии этого редактора, markdownpad free и markdownpad pro. Для наших задач нам вполне хватит бесплатной версии, поэтому жмём на кнопку скачать:

markdownpad.com

После этого начнётся загрузка и потом останется только установить редактор. Я думаю что вы с этим справитесь, но если что, то на сайте есть инструкция:

Установка MDPad

Ок, надеюсь что вы установили редактор. Теперь давайте его запустим:

Фактически, типичное окно редактора текста/кода, каковым MarkDownPad фактически и является. Дальше принцип простой: просто пишем в файл всё то, что вам необходимо иметь в README файле для вашего проекта и применяете инструменты форматирования, такие как: код, цитата, ссылка, заголовок, список и т.д. Я думаю, что самостоятельно разобраться с markdown разметкой будет не очень сложно, но если что, то вот вам полезная статья с наглядным руководством по markdown.

Для примера я просто дам вам код README.md файла библиотеки speedfile:

# Speed File Library # ## What is this? ## The module allows you to work with files in just one line of code, without the need to manually open and close the file each time ## Quick Guide ## The module is based on the following structure: f = open('data.txt') data = f.readlines() f.close() Which Python provides by standard. ---------- ### Using ### Using the library is as simple and convenient as possible: Let's import it first: First, import everything from the library (use the `from `. ` import *` construct). Examples of all operations: Writing the contents of an entire file to a variable using the `read()` function: temp = File(path='test.txt').read() Writing the contents of an entire file to a variable line by line using the `readlines()` function: temp = File(path='test.txt').readlines() Write only the first line from a file using the `readline()` function: temp = File(path='test.txt').readline() Writing data from a variable to a file using write() (overwriting or creating a file): temp = "Test data" File(path='test.txt', data=temp).write() Adding data from a variable to a file using write() (or creating a file): temp = "Test data" File(path='test.txt', data=temp).add() ---------- ## Developer ## My site: [link](https://y-a-r-i-k.github.io/) 

И то, как он выглядит на GitHub:

Speedfile на GitHub

Я надеюсь, вы здесь разберётесь)).

Публикация пакета

Ок, если вы выполнили все предшествующие шаги, но вы готовы к публикации пакета. Итак, переходим к делу:

Открываем терминал или используем встроенный в PyCharm (или редактор кода, который вы используете). Переходим в корневую директорию проекта и пишем:

python setup.py sdist bdist_wheel

После этого создадутся несколько новых папок. Теперь мы готовы к собственно загрузке модуля на PyPi. Пишем это в терминал:

twine upload --repository pypi dist/*

После этого вас попросят ввести ваш usrename и пароль. И на этом моменте хотелось бы остановиться подробнее. Когда вы будете регистрироваться на PyPi вас скорее всего попросят (в добровольно-принудительном порядке) подключить второй фактор защиты. Если вы это уже сделали, то просто указать username и пароль у вас не получится, это вызовет ошибку.

Как же это решить? Очень просто. Вам нужно получить ваш API токен для PyPi.

  1. Переходим в настройки учётной записи:

  1. Крутим вниз до пункта с API-токенами и жмём добавить токен:

  1. Далее вас попросят назвать токен и выбрать область его действия:

  1. И последним шагом вам дадут ваш новый токен. Сразу сохраните его у себя на компьютере, потому что как следует из предупреждения вы видите его в первый и последний раз:

Итак, обратно выгрузке проекта: теперь в поле для ввода username вам надо указать __token__ а туда где должен быть пароль — ваш API-токен (рекомендую использовать пункт paste или вставить из контекстного меню, так так Ctrl + V может сработать не корректно). После этого жмём Enter и ждём. После завершения загрузки вам дадут ссылку на страницу с вашей библиотекой.

Страница будет выглядеть стандартно, например вот страница PyDeepLib:

PyDeepLib

Ну, и на этом всё, поздравляю! Вы создали и загрузили свою первую библиотеку на PyPi.

От автора:

Спасибо, что дочитали статью до конца, надеюсь она была вам полезна и сэкономила вам время. Если хотите повлиять на выход дальнейших статей, то можете подписаться на мой telegram-канал, там в том числе будут опросы касаемо выходов новых статей. Если хотите со мной связаться или предложить тему для статьи — мои контакты есть на сайте.

Ещё раз спасибо, что дочитали до сюда!

Библиотеки

Для этого есть два ключевых слова — from и import. import нужен чтобы просто импортировать библиотеку, а from нужен чтобы импортировать что-то конкретное.

import math # Импортирование библиотеки math from random import randint # Импортирование из библиотеки random модуль randint 

Чтобы пользоваться, надо написать слово(), или же слово1.слово2()

Как создать библиотеку? [ ]

Здесь написано лишь про то как создать библиотеку. Если вы хотите узнать больше о классах и о самом ООП, то перейдите в статью о классах.

Для этого надо создать файл и написать там один или более классов. Можно также вставить лишь одну функцию, а можно просто переменную сделать там. Пример кода

# Предположим, что файл называется zoo.py # Переменные в классах называются полями. Функции в классах - модули. class Animals: dog = None snake = None elephant = None lion = None # self в модулях обязателен! def __init__(self, dog, snake, elephant, lion): # Благодаря __init__ можно просто написать Animals(значения) self.status(dog, snake, elephant, lion) self.get_data() def status(self, dog, snake, elephant, lion): # Ввод данных в поля self.dog = dog self.snake = snake self.elephant = elephant self.lion = lion def get_data(self): # Отправка сообщения. Необязательно, но можно print('Статус животных в зоопарке:', 'Собака - ' + str(self.dog), 'Змея - ' + str(self.snake), 'Слон - ' + str(self.elephant), 'Лев - ' + str(self.lion), sep='\n') # Дальше только для второго примера идёт some_variable_Animals = 'Некоторая переменная в Animals' def summa(a,b,c): return print(a + b + c) some_variable = 'Это текст в переменной some_variable. Она находится в файле mymodule.py. Вообще, переменным здесь не совсем место, но они могут быть здесь :/' 
# Переходим к другому файлу (название неважно) from zoo import * # import * означает что импортируется всё из файла zoo. Без этого надо было бы писать ". import Animals", ". import summa" и т.д. Animals('Есть',True,'1','Нет') # print(some_variable_Animals) - При попытке вывести это выйдет ошибка summa(1, 5, 7) print(some_variable) # Если вы всё правильно написали, то выведится это: # Статус животных в зоопарке: # Собака - Есть # Змея - True # Слон - 1 # Лев - Нет # 13 # Это текст в переменной some_variable. Она находится в файле mymodule.py. Вообще, переменным здесь не совсем место, но они могут быть здесь :/ 

Установка библиотек из pip [ ]

Для установки библиотеки нужно написать в консоль такую команду:

pip install модуля>

Для вывода всех установленных библиотек

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *