Вступление
Каждый пакет требует 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__;
'имя_пакета' - это пакет, который не может быть выполнен напрямую.