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

Вступление

Каждый пакет требует setup.py файл , который описывает пакет.

Рассмотрим следующую структуру каталогов для простого пакета:

 +-- package_name
|       |
|       +-- __init__.py
|       
+-- setup.py

 

__init__.py содержит только строки def foo(): return 100 .

Следующий setup.py определит пакет:

 from setuptools import setup


setup(
    name='package_name',                    # package name
    version='0.1',                          # version
    description='Package Description',      # short description
    url='http://example.com',               # package URL
    install_requires=[],                    # list of packages this package depends
                                            # on.
    packages=['package_name'],              # List of module names that installing
                                            # this package will provide.
) 

virtualenv отлично подходит для тестирования установки пакета без изменения других ваших сред Python:

 $ virtualenv .virtualenv
...
$ source .virtualenv/bin/activate
$ python setup.py install
running install
...
Installed .../package_name-0.1-....egg
...
$ python
>>> import package_name
>>> package_name.foo() 
100

 

Загрузка в PyPI

После того, как ваш setup.py полностью функционален (см Введение ), очень легко загрузить пакет PyPI .

Установите файл .pypirc

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

 # .pypirc file

[distutils]
index-servers =
  pypi
  pypitest

[pypi]
repository=https://pypi.python.org/pypi
username=your_username
password=your_password

[pypitest]
repository=https://testpypi.python.org/pypi
username=your_username
password=your_password

 

Это безопаснее использовать twine для загрузки пакетов, поэтому убедитесь , что установлено.

 $ pip install twine

 

Зарегистрируйтесь и загрузите в testpypi (необязательно)

Примечание: PyPI не допускает перезапись загруженных пакетов , поэтому целесообразно сначала проверить развертывание на выделенном тестовом сервере, например testpypi. Этот вариант будет обсуждаться. Рассмотрим схему управления версиями для вашего пакета до загрузки , таких как календарь версий или семантического версий .

Либо войти или создать новую учетную запись на testpypi.Регистрация требуется только в первый раз, хотя регистрация более одного раза не наносит вреда.

 $ python setup.py register -r pypitest

 

Находясь в корневом каталоге вашего пакета:

 $ twine upload dist/* -r pypitest

 

Теперь ваш пакет должен быть доступен через вашу учетную запись.

тестирование

Создайте тестовую виртуальную среду. Попробуйте pip install пакет с любого testpypi или PyPI.

 # Using virtualenv
$ mkdir testenv
$ cd testenv
$ virtualenv .virtualenv
...
$ source .virtualenv/bin/activate
# Test from testpypi
(.virtualenv)  pip install --verbose --extra-index-url https://testpypi.python.org/pypi package_name
...
# Or test from PyPI
(.virtualenv) $ pip install package_name
...

(.virtualenv) $ python
Python 3.5.1 (default, Jan 27 2016, 19:16:39)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import package_name
>>> package_name.foo()
100

 

В случае успеха ваш пакет будет наименее импортируемым. Вы также можете попробовать протестировать свой API перед окончательной загрузкой в ​​PyPI. Если вы провалили упаковку во время тестирования, не беспокойтесь. Вы все еще можете это исправить, повторно загрузить в testpypi и протестировать снова.

Зарегистрируйтесь и загрузите в PyPI

Убедитесь в том , twine установлен:

 $ pip install twine

 

Либо войти или создать новую учетную запись на PyPI .

 $ python setup.py register -r pypi
$ twine upload dist/*

 

Это оно! Ваш пакет теперь живут .

Если вы обнаружите ошибку, просто загрузите новую версию вашего пакета.

Документация

Не забудьте включить хотя бы какую-то документацию для вашего пакета. PyPi принимает в качестве языка форматирования по умолчанию в ReStructuredText .

Прочти меня

Если пакет не имеет большую документации, включает в себя то , что может помочь другим пользователям в README.rst файла. Когда файл готов, нужен еще один, чтобы сказать PyPi, чтобы он показывался.

Создать setup.cfg файл и поместить эти две строки в нем:

 [metadata]
description-file = README.rst

 

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

лицензирование

Это часто больше , чем могут поместить LICENSE.txt файл в пакете с одним из лицензий OpenSource , чтобы сообщить пользователям , если они могут использовать ваш пакет, например , в коммерческих проектах или если ваш код может использоваться с их лицензией.

В более понятным способом некоторые лицензии объясняются на TL; DR .

Делаем пакет исполняемым

Если пакет не только библиотека, но есть кусок кода , который может быть использован либо в качестве образца или отдельного приложения при установке вашего пакета, положил этот кусок кода в __main__.py файл.

Поместите __main__.py в package_name папке. Таким образом, вы сможете запустить его прямо из консоли:

 python -m package_name

 

Если нет никакого __main__.py файла доступен, пакет не будет работать с этой командой, будет напечатана эта ошибка:

питон: Нет модуль с именем package_name.__main__; 'имя_пакета' - это пакет, который не может быть выполнен напрямую.