Poetry — это менеджер зависимостей для Python, который также может создавать и упаковывать проекты Python для распространения. PyPI — официальный репозиторий Python для загрузки и скачивания пакетов. Это официальный ресурс пакетов для третьих лиц, которым управляет Python Software Foundation. После публикации на PyPI пакеты становятся доступными для установки.
В этом мануале мы создадим учетную запись PyPI, настроим аутентификацию с помощью токена в Poetry, затем соберем проект и опубликуем его на PyPI. После этого вы сможете добавить опубликованный пакет в качестве зависимости к другим проектам Python.
Требования
- Сервер с пользователем sudo и включенным брандмауэром (мы используем Ubuntu 22.04, настроенный по этому мануалу).
- Последняя версия Python 3, настроенная в соответствии с разделом 1 этого руководства.
- Установленный Poetry, инструкции вы найдете здесь.
1: Создание учетной записи PyPI
Перед загрузкой пакета в PyPI, необходимо создать учетную запись. Перейдите на официальную страницу регистрации.
Далее, чтобы обезопасить свои учетные данные PyPI, нужно включить аутентификацию по токену.
2: Включение аутентификации по токену
Аутентификация с помощью токена — это рекомендуемый способ проверки учетной записи PyPI в командной строке. При этом вместо имени пользователя и пароля можно использовать автоматически сгенерированный токен. Токены можно добавлять и отзывать в любое время; с их помощью можно предоставлять доступ к отдельным частям вашей учетной записи. Это делает их безопасными и значительно уменьшает риск взлома. Теперь создадим новый API-токен для учетной записи, для этого перейдите в настройки учетной записи:
Прокрутите вниз и найдите раздел “API tokens”. Нажмите “Add API token”:
На следующей странице можно назвать свой токен. В этом мануале он будет называться poetry, но вы можете выбрать любое имя:
После создания токена важно скопировать его, потому что он будет показан только один раз. Это обычное дело для API-токенов, которые можно создавать заново по мере необходимости.
Теперь с помощью этого токена можно настроить свои учетные данные в Poetry для подготовки к публикации. Чтобы не добавлять свой API токен к каждой команде, которой он нужен в Poetry, мы сделаем это один раз с помощью команды config:
poetry config pypi-token.pypi your-api-token
Добавленный API токен будет использоваться как учетные данные. Poetry уведомит о том, что ваши учетные данные хранятся в простом текстовом файле. Если использовать обычное имя пользователя и пароль для учетных данных, то это будет небезопасно. Хранение токенов безопасно и удобно, так как они легко удаляются, обновляются и генерируются случайным образом. Но также можно вводить свой API токен вручную для каждой команды.
Сейчас всё готово для создания и публикации проекта.
3: Сборка проекта
Сборка — это то же, что и упаковка проекта и это обязательный шаг перед его публикацией. Чтобы собрать проект, введите команду:
poetry build
Получим такой вывод:
Building 8host-poetry (0.1.0) - Building sdist - Built 8host-poetry-0.1.0.tar.gz - Building wheel - Built 8host_poetry-0.1.0-py3-none-any.whl
Будут выведены два файла. Первый – это исходный код sdist, он выводится в файл tar.gz. Второй – скомпилированный пакет wheel, который выводится в файл .whl. И теперь всё готово для публикации пакета Python в PyPI.
4: Публикация пакета Python в PyPI
Poetry по умолчанию публикует проекты в PyPI. Для команды публикации не нужно будет указывать учетные данные, поскольку мы уже установили API токен для авторизации
Для публикации скомпилированного пакета введите:
poetry publish
Вывод будет следующим:
Publishing 8host-poetry (0.1.0) to PyPI - Uploading 8host-poetry-0.1.0.tar.gz 100% - Uploading 8host_poetry-0.1.0-py3-none-any.whl 100%
Теперь можно проверить опубликованный пакет. Откройте свои проекты PyPI в браузере.
Пакет опубликован, находится в открытом доступе на PyPI, а также доступен как зависимость через Poetry. Опубликованный пакет можно добавить в качестве зависимости в другие проекты Python.
Примечание: Собрать и опубликовать пакет в PyPI можно также и одной командой, добавив следующий флаг в команду publish:
poetry publish --build
Это полезная функция, но ее работа зависит от стадии завершенности вашего проекта.
Подводим итоги
В этом мануале с помощью Poetry мы создали и опубликовали пакет. Также мы создали учетную запись PyPI, настроили аутентификацию API токена с помощью Poetry, затем скомпилировали проект перед его публикацией. Пакет доступен публично как зависимость и может быть включен через Poetry.