Содержание страницы
6. Индекс пакетов Python (PyPI)¶The Python Package Index (PyPI)
Python Package Index (PyPI) хранит метаданные, описывающие дистрибутивы, собранные с помощью distutils, а также данные пакетов, такие как файлы дистрибутивов, если автор пакета пожелает.
Distutils предоставляет команды register и upload для отправки метаданных и файлов дистрибутивов в PyPI соответственно. См. Distutils commands для получения информации об этих командах.
6.1. Обзор PyPI¶PyPI overview
PyPI позволяет отправлять в индекс любое количество версий вашего дистрибутива. Если вы измените метаданные для определённой версии, вы можете отправить их снова, и индекс будет обновлён.
PyPI хранит запись для каждой комбинации (имя, версия). Первый пользователь, отправивший информацию для данного имени, назначается владельцем этого имени. Изменения можно отправлять через команду register или через веб-интерфейс. Владельцы могут назначать других пользователей владельцами или сопровождающими. Сопровождающие могут редактировать информацию о пакете, но не могут назначать новых владельцев или сопровождающих.
По умолчанию PyPI отображает только самую новую версию данного пакета. Веб-интерфейс позволяет изменить это поведение по умолчанию и вручную выбрать, какие версии отображать, а какие скрывать.
Для каждой версии PyPI отображает домашнюю страницу. Домашняя страница создаётся из long_description, который можно передать через команду register. Дополнительную информацию см. в отображении пакета на PyPI.
6.2. Команды Distutils¶Distutils commands
Distutils предоставляет две команды для отправки данных пакетов в PyPI: команда register для отправки метаданных в PyPI и команда upload для отправки файлов дистрибутивов. Обе команды читают конфигурационные данные из специального файла, называемого .pypirc-файл.
6.2.1. Команда register¶The register command
Команда distutils register используется для отправки метаданных вашего дистрибутива на сервер индекса. Она вызывается следующим образом:
python setup.py register
Distutils ответит следующим приглашением:
running register
We need to know who you are, so please choose either:
1. use your existing login,
2. register as a new user,
3. have the server generate a new password for you (and email it to you), or
4. quit
Your selection [default 1]:
Примечание: если ваше имя пользователя и пароль сохранены локально, это меню не отобразится. Кроме того, обратитесь к файлу .pypirc, чтобы узнать, как хранить учётные данные в файле .pypirc.
Если вы ещё не зарегистрированы в PyPI, вам необходимо сделать это сейчас. Следует выбрать вариант 2 и ввести свои данные по запросу. Вскоре после отправки данных вы получите электронное письмо, которое будет использовано для подтверждения регистрации.
После регистрации вы можете выбрать вариант 1 из меню. Вас попросят ввести имя пользователя и пароль PyPI, а затем register отправит ваши метаданные в индекс.
См. Дополнительные параметры команды для параметров команды register.
6.2.2. Команда upload¶The upload command
Команда distutils upload отправляет файлы дистрибутивов в PyPI.
Команда вызывается сразу после сборки одного или нескольких файлов дистрибутивов. Например, команда
python setup.py sdist bdist_wininst upload
вызовет загрузку исходного дистрибутива и установщика для Windows на PyPI. Обратите внимание, что они будут загружены, даже если были собраны при предыдущем вызове setup.py, но загружаются только те дистрибутивы, которые указаны в командной строке вызова, включающего команду upload.
Если команда register уже вызывалась в той же команде и пароль был введён в приглашении, upload использует введённый пароль повторно. Это полезно, если не требуется хранить пароль в открытом виде в файле .pypirc.
Можно использовать опцию --sign, чтобы указать upload подписывать каждый загружаемый файл с помощью GPG (GNU Privacy Guard). Программа gpg должна быть доступна для выполнения в системе PATH. Также можно указать, какой ключ использовать для подписи, с помощью опции --identity=name.
См. Дополнительные параметры команды для дополнительных параметров команды upload.
6.2.3. Дополнительные параметры команд¶Additional command options
В этом разделе описаны параметры, общие для команд register и upload.
Опция --repository или -r позволяет указать сервер PyPI, отличный от сервера по умолчанию. Например:
python setup.py sdist bdist_wininst upload -r https://example.com/pypi
Для удобства вместо URL можно использовать имя, если файл .pypirc настроен соответствующим образом. Например:
python setup.py register -r other
См. .pypirc-файл для получения дополнительной информации об определении альтернативных серверов.
Опция --show-response отображает полный текст ответа от сервера PyPI, что полезно при отладке проблем с регистрацией и загрузкой.
6.2.4. Файл .pypirc¶The .pypirc file
Команды register и upload проверяют существование файла .pypirc по пути $HOME/.pypirc. Если файл существует, команда использует имя пользователя, пароль и URL репозитория, заданные в файле. Формат файла .pypirc следующий:
[distutils]
index-servers =
pypi
[pypi]
repository: <repository-url>
username: <username>
password: <password>
В разделе distutils определяется переменная index-servers, в которой перечисляются имена всех разделов, описывающих репозиторий.
Каждый раздел, описывающий репозиторий, задаёт три переменные:
- repository – задаёт URL сервера PyPI. По умолчанию
- https://www.python.org/pypi.
- username – зарегистрированное имя пользователя на сервере PyPI.
- password – пароль для аутентификации. Если опущен, пользователю
- будет предложено ввести его при необходимости.
Если требуется определить другой сервер, можно создать новый раздел и указать его в переменной index-servers:
[distutils]
index-servers =
pypi
other
[pypi]
repository: <repository-url>
username: <username>
password: <password>
[other]
repository: https://example.com/pypi
username: <username>
password: <password>
Это позволяет вызывать команды register и upload с опцией --repository, как описано в дополнительных параметрах команды.
В частности, может потребоваться добавить тестовый репозиторий PyPI в ваш .pypirc, чтобы упростить тестирование перед первой загрузкой на сам PyPI.
6.3. Отображение пакетов PyPI¶PyPI package display
Поле long_description играет особую роль на PyPI. Оно используется сервером для отображения домашней страницы зарегистрированного пакета.
Если для этого поля используется синтаксис reStructuredText, PyPI разберёт его и отобразит домашнюю страницу пакета в формате HTML.
Поле long_description можно прикрепить к текстовому файлу, расположенному в пакете:
from distutils.core import setup
with open('README.txt') as file:
long_description = file.read()
setup(name='Distutils',
long_description=long_description)
В этом случае README.txt – это обычный текстовый файл reStructuredText, расположенный в корне пакета рядом с setup.py.
Чтобы предотвратить регистрацию некорректного содержимого reStructuredText, можно использовать программу rst2html, предоставляемую пакетом docutils, и проверить long_description из командной строки:
$ python setup.py --long-description | rst2html.py > output.html
docutils выдаст предупреждение, если с синтаксисом что-то не так. Поскольку PyPI применяет дополнительные проверки (например, передавая --no-raw в rst2html.py в приведённой выше команде), возможность выполнить команду без предупреждений не гарантирует, что PyPI успешно преобразует содержимое.