Last updated
Last updated
(Python Package Index) - хранилище питон-либ, установка которых производится с помощью pip install
.
PyPI пакет - python-пакет - директория с файлом __init__.py
Основные шаги прописаны :
Создаем репозиторий
Создаем питон-пакет - директория с __init__.py файлом
Создаем доп-файлы:
README.md - описание проекта
setup.py - модуль с описанием установки пакета для PyPI
LICENSE - лицензия, обычно MIT
Ставим
Собираем все в архив: python .\setup.py sdist bdist_wheel
Заливаем в PyPI: twine upload dist/*
Для загрузки в :
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
Чтобы не вводить постоянно логин/пароль от PyPI, можно установить переменные среды
TWINE_USERNAME
,TWINE_PASSWORD
После загрузки на PyPI, пакет можно установить с помощью pip install
MANIFEST.in - для добавления непитон файлов, таких как jinja2-шаблонов, в пакет, пример: include {package}/templates/*
Устанавливаем:
Создаем конфиг - .bumpversion.cfg:
Обновляем версию:
Если нужно добавить зависимости от других пакетов, необходимо прописать настройку install_requires
в функции setuptools.setup
в формате «{package}{operator}{version}»(например, "jinja2>=2.10"
)
Для того, чтобы залить пакет на приватный PyPI (например, если пакет содержит бизнес инфу, которую не надо шарить за пределы работки), необходимо поднять приватный PyPI:
Создаем директорию, где будут находится пароль от pypi и сами пакеты:
Создаем файл с паролем и заполняем его для юзера, по которому мы будем стучаться на PyPI (например, pypi) :
Создаем директорию ддя пакетов:
Можем запустить pypi-сервер:
Далее создаем nginx-директиву:
Теперь, перейдя по {айпи, где крутится nginx}:8091, увидим сообщение о развернутом pypi-сервере:
Для загрузки пакетов на pypi-сервер, необходимо указать его адрес с логином и паролем:
Или адрес без логина и пароля с установленными переменными среды: TWINE_USERNAME
, TWINE_PASSWORD
Для скачивания пакетов необходимо добавить ссылку на pypi-сервер. В случае с pipenv, необходимо в Pipfile добавить директиру source:
Чтобы не палить логин и пароль в Pipfile, можно задать адрес сервера в виде переменной среды и заменить урл в Pipfile:
Теперь можно ставить пакеты как обычно:
Вместо создания setup.py, сборку через sdist, деплой через twine, ункремент через bump2version можно использовать Poetry
1.a Создаем pyproject.toml - микс Pipfile и setup.py:
1.b Для установки зависимостей из существующего pyproject.toml:
Устанавливаем новые зависимости:
Собираем и загружаем в PyPI:
Инкремент версии
Добавление приватного репозитория {host:port}, с именем {pypi_alias}:
Добавление логина/пароля для доступа в приватный репо:
Загрузка пакета:
CHANGELOG.md - описание изменений в новых версиях пакета (). Версионирование пакетов хорошо делать соглано .
Для автоматизации версионирования пакетов можно использовать :
Устанавливаем с , необходимой для доступа к PyPI с паролем:
Устанавливаем для создания пароля:
Если команда ничего не выводит, значит все ок, и теперь можно создать :
- альтернатива Pipenv и тулза для создания питон-пакетов