Питон-пакеты и PyPI

PyPIarrow-up-right (Python Package Index) - хранилище питон-либ, установка которых производится с помощью pip install.

PyPI пакет - python-пакет - директория с файлом __init__.py

Создание пакета

Основные шаги прописаны здесьarrow-up-right:

  1. Создаем репозиторий

  2. Создаем питон-пакет - директория с __init__.py файлом

  3. Создаем доп-файлы:

    • README.md - описание проекта

    • setup.py - модуль с описанием установки пакета для PyPI

    • LICENSE - лицензия, обычно MIT

  4. Ставим twinearrow-up-right

  5. Собираем все в архив: python .\setup.py sdist bdist_wheel

  6. Заливаем в PyPI: twine upload dist/*

    • Для загрузки в тестовый PyPIarrow-up-right: twine upload --repository-url https://test.pypi.org/legacy/ dist/*

    • Чтобы не вводить постоянно логин/пароль от PyPI, можно установить переменные среды TWINE_USERNAME, TWINE_PASSWORD

  7. После загрузки на PyPI, пакет можно установить с помощью pip install

Еще доп файлы

Обновление версии

Для автоматизации версионирования пакетов можно использовать bump2versionarrow-up-right:

  1. Устанавливаем:

  1. Создаем конфиг - .bumpversion.cfg:

  1. Обновляем версию:

setup.py

  • Если нужно добавить зависимости от других пакетов, необходимо прописать настройку install_requires в функции setuptools.setup в формате «{package}{operator}{version}»(например, "jinja2>=2.10")

Приватный PyPI

Установка сервера

Для того, чтобы залить пакет на приватный PyPI (например, если пакет содержит бизнес инфу, которую не надо шарить за пределы работки), необходимо поднять приватный PyPI:

  1. Создаем директорию, где будут находится пароль от pypi и сами пакеты:

  1. Устанавливаем PyPI серверarrow-up-right с passlib-зависимостьюarrow-up-right, необходимой для доступа к PyPI с паролем:

  1. Устанавливаем htpasswdarrow-up-right для создания пароля:

  1. Создаем файл с паролем и заполняем его для юзера, по которому мы будем стучаться на PyPI (например, pypi) :

  1. Создаем директорию ддя пакетов:

  1. Можем запустить pypi-сервер:

  1. Если команда ничего не выводит, значит все ок, и теперь можно создать supervisor-программуarrow-up-right:

  1. Далее создаем nginx-директиву:

  1. Теперь, перейдя по {айпи, где крутится nginx}:8091, увидим сообщение о развернутом pypi-сервере:

https://raw.githubusercontent.com/potykion/py_poc_toolbox/master/_static/pypi.PNG

Загрузка пакетов

Для загрузки пакетов на pypi-сервер, необходимо указать его адрес с логином и паролем:

Или адрес без логина и пароля с установленными переменными среды: TWINE_USERNAME, TWINE_PASSWORD

Стягивание пакетов

Для скачивания пакетов необходимо добавить ссылку на pypi-сервер. В случае с pipenv, необходимо в Pipfile добавить директиру source:

Чтобы не палить логин и пароль в Pipfile, можно задать адрес сервера в виде переменной среды и заменить урл в Pipfile:

Теперь можно ставить пакеты как обычно:

Poetry

Вместо создания setup.py, сборку через sdist, деплой через twine, ункремент через bump2version можно использовать Poetry

Poetryarrow-up-right - альтернатива Pipenv и тулза для создания питон-пакетов

Создание пакетов

1.a Создаем pyproject.toml - микс Pipfile и setup.py:

1.b Для установки зависимостей из существующего pyproject.toml:

  1. Устанавливаем новые зависимости:

  1. Собираем и загружаем в PyPI:

  1. Инкремент версии

Загрузка в приватный PyPI

Добавление приватного репозитория {host:port}, с именем {pypi_alias}:

Добавление логина/пароля для доступа в приватный репо:

Загрузка пакета:

Last updated