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

Введение

Примеры

  • 10

    Вступление

    Каждый пакет требует 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
    
     
  • 5

    Загрузка в 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 .

  • 0

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

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

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

     python -m package_name
    
     

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

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

Синтаксис

Параметры

Примечания