Как опубликовать ваш пакет в PyPI используя PyCharm
Написав какой-нибудь чудесный код, вам, возможно, захочется сделать его доступным для остальных. Питонский способ поделиться пакетом – это разместить его на PyPI. Давайте создадим простой пакет и попробуем пройти через весь процесс его публикации!
Наш пакет: левая панель
Разработчики JavaScript хороши в том, как нужно делиться кодом: если кто-то написал функционал, он делится им, так что никому больше не нужно изобретать велосипед (впрочем, некоторых это не останавливает). Отличный пример такой самоотверженности, это шикарная библиотека left-pad, и сегодня мы создадим клон этой библиотеки и поделимся её величием с сообществом Python! Кто-то уже послужил обществу, выпустив пакет left-pad в PyPI. Однако, этот пакет не содержит ни модульных тестов, ни репозиторий GitHub, почему мы не можем сделать лучше? Давайте создадим замену, и назовем её pad-on-left. Очень важно проверить, не занято ли название вашего пакета в данный момент на PyPI, перед тем как начать. Чтобы сделать это, просто воспользуйтесь окном поиска в правом верхнем углу страницы PyPI.
Структура пакета
Чтобы наш пакет работал с PyPI (что в целом означает, что нам нужна работа с distutils), наш пакет нуждается в нескольких файлах:
Нам нужно написать файл README, по умолчанию в Python для этого используется ReStructuredText. Вы можете познакомиться с ReStructuredText в документации Sphinx. Если вы предпочитаете использовать Markdown, или любой другой файловый формат, вам нужно добавить файл setup.cfg туда, где вы определяете название файла. Более того, вам нужно подобрать лицензию для вашего кода. Люди не могут пользоваться вашим кодом без лицензии. В данном случае, мы выберем разрешительную лицензию с открытым исходным кодом, я использую лицензию Apache 2.0, но для вашего проекта вы можете использовать лицензию MIT, или любую другую. Мы создадим файл setup.py в будущем, используя PyCharm. Давайте начнем с нового, чистого проекта Python, и напишем приложение.
Написание приложения
Необходимая нам функция для написания очень проста: мы берем строку, или число, если оно меньше определенной длинны, мы должны добавить символы для заполнения левой стороны, пока не достигнем необходимой длины. В отличие от JavaScript, стандартная библиотека Python располагает специальным методом:
Теперь добавим несколько тестов. Если вы перейдете на страницу npm (Node package manager, аналог pip для JavaScript) для left-pad, то увидите несколько вложенных примеров. Давайте убедимся в том, что наш код корректно выполняет эти примеры. Отличный способ модульного тестирования Python является использование doctest-ов. Они позволяют вам писать примеры в docstring-ах вашего кода, и затем doctest будет выполнять эти примеры, а также подтверждать, соответствует ли ваш код документации:
Для запуска теста, добавьте конфигурацию запуска doctest: перейдите в Run Configuration и добавьте конфигурации test и doctest. После этого вы можете определить путь, для этого существует несколько способов, я решил настроить его для поиска в папке моего пакета. После этого, вы можете запустить тест и проверить, проходят ли модульные тесты.
Теперь сгенерируем файл setup.py, выбрав Tools -> Create setup.py:
- Название пакета должно уже быть заполнено, оно же и является названием нашего проекта. Это название пользователи будут использовать для установки данного пакета в pip;
- Version: вам нужно предоставить начальную версию вашего пакета. Она обновляется каждый раз, когда вы нажимаете на update в PyPI. Вам следует использовать семантическое управление версиями, по возможности, в противном случае — PEP 440 описывает несколько способов управления версий пакетов.;
- URL: это должен быть URL домашней страницы вашего пакета. В большинстве случаев вы можете использовать URL-адрес репозитория GitHub;
- License: лицензия, которую вы используете для своего кода, я использую Apache 2.0;
- Author: ваше имя и фамилия:
- Author Email: ваша почта
- Description: короткое описания того, что ваш пакет такое и зачем он нужен.
Публикация кода в GitHub
Давайте создадим репозиторий git, и опубликуем код на GitHub. Используйте Ctrl+Shift+A (Cmd+Shift+A на Mac) для открытия окна Find Action и напишите «Create Git Repository».
Добавьте файл .gitignore, выделите все свои файлы и затем добавьте их в git при помощи Ctrl+Alt+A (Cmd+Alt+A). Затем зафиксируйте (Ctrl + K / Cmd + K) ваши файлы, чтобы создать первоначальную фиксацию. Теперь опубликуйте в GitHub: снова откройте Find Action (Ctrl + Shift + A) и найдите «Share Project on GitHub».
Так как мы собираемся упаковать и выпустить этот код с версией 1.0.0, мы можем также пометить этот коммит как версия 1.0.0. Мы можем сделать это, перейдя по VCS | Git | Tag (в PyCharm). Я использую v1.0.0 и как название тега, и сообщение. Рекомендуется использовать сообщения в том числе, для создания полного тега. Теги размещаются раздельно, так что нам нужно перейти по VCS | Git | Push, поставить флажок на Push Tags и Push.
Регистрация в PyPI
С этого момента, нам нужно зарегистрировать как реальный, так и тестовый PyPI.
- Регистрация тестового аккаунта
- Регистрация полноценного аккаунта
Чтобы использовать эти учетные данные, нам нужно создать файл .pypirc. Это ini файл конфигурации, так что давайте создадим скреч файл, который мы можем сохранить в надлежащем месте. Используйте Shift+Ctrl+Alt+Insert для создания скреч файла, указав ini в качестве языка.