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

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

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

Еще от кодкамп
Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.