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

замечания

Проект pypa sample содержит полный, легко изменяемый шаблон setup.py который демонстрирует широкий набор возможностей, которые могут предложить инструменты настройки.

Вступление

Для каждого пакета требуется файл 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 то, что может помочь другим пользователям в файле 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 отсутствует, пакет не будет запущен с этой командой, и эта ошибка будет напечатана:

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