Документация Python неофициальный перевод

packageindex.md

156 строк · 11.6 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.2/distutils/packageindex.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 6. Индекс пакетов Python (PyPI)89В [Индексе пакетов Python (PyPI)](https://python-all.ru/3.2/distutils/packageindex.html) хранятся [*метаданные*](https://python-all.ru/3.2/distutils/setupscript.html#meta-data), описывающие дистрибутивы, упакованные с помощью distutils, а также данные пакетов, такие как файлы дистрибутивов, если автор пакета того пожелает.1011Distutils предоставляет две команды для отправки данных пакетов в PyPI: команда [*register*](https://python-all.ru/3.2/distutils/packageindex.html#package-register) для отправки метаданных в PyPI и команда [*upload*](https://python-all.ru/3.2/distutils/packageindex.html#package-upload) для отправки файлов дистрибутивов. Обе команды читают конфигурационные данные из специального файла с именем [*.pypirc*](https://python-all.ru/3.2/distutils/packageindex.html#pypirc). Для каждого пакета PyPI [*отображает домашнюю страницу*](https://python-all.ru/3.2/distutils/packageindex.html#package-display), созданную на основе `long_description`, отправленного командой **register**.1213## 6.1. Регистрация пакетов1415Команда distutils **register** используется для отправки метаданных вашего дистрибутива в индекс. Она вызывается следующим образом:1617```python18python setup.py register19```2021Distutils ответит следующим приглашением:2223```python24running register25We need to know who you are, so please choose either:26    1. use your existing login,27    2. register as a new user,28    3. have the server generate a new password for you (and email it to you), or29    4. quit30Your selection [default 1]:31```3233Примечание: если ваши имя пользователя и пароль сохранены локально, это меню отображаться не будет.3435Если вы ещё не зарегистрированы в PyPI, вам необходимо сделать это сейчас. Следует выбрать вариант 2 и ввести свои данные по запросу. Вскоре после отправки данных вы получите электронное письмо, которое будет использовано для подтверждения регистрации.3637После регистрации вы можете выбрать вариант 1 из меню. Вас попросят ввести имя пользователя и пароль PyPI, а затем **register** отправит ваши метаданные в индекс.3839Вы можете отправить любое количество версий вашего дистрибутива в индекс. Если вы измените метаданные для определённой версии, вы можете отправить их снова, и индекс будет обновлён.4041PyPI хранит запись для каждой отправленной комбинации (имя, версия). Первый пользователь, отправивший информацию для данного имени, назначается Владельцем этого имени. Он может вносить изменения через команду **register** или через веб-интерфейс. Он также может назначать других пользователей Владельцами или Сопровождающими. Сопровождающие могут редактировать информацию о пакете, но не назначать других Владельцев или Сопровождающих.4243По умолчанию PyPI отображает только самую новую версию данного пакета. Веб-интерфейс позволяет изменить это поведение по умолчанию и вручную выбрать, какие версии отображать, а какие скрывать.4445## 6.2. Загрузка пакетов4647Команда distutils **upload** отправляет файлы дистрибутивов в PyPI.4849Команда вызывается сразу после сборки одного или нескольких файлов дистрибутивов. Например, команда5051```python52python setup.py sdist bdist_wininst upload53```5455вызовет загрузку исходного дистрибутива и установщика для Windows на PyPI. Обратите внимание, что они будут загружены, даже если были собраны при предыдущем вызове `setup.py`, но загружаются только те дистрибутивы, которые указаны в командной строке вызова, включающего команду **upload**.5657Команда **upload** использует имя пользователя, пароль и URL репозитория из файла `$HOME/.pypirc` (см. раздел [*Файл .pypirc*](https://python-all.ru/3.2/distutils/packageindex.html#pypirc) для получения дополнительной информации об этом файле). Если команда **register** ранее вызывалась в той же команде, и пароль был введён в приглашении, **upload** повторно использует введённый пароль. Это полезно, если вы не хотите хранить пароль в открытом виде в файле `$HOME/.pypirc`.5859Можно указать другой сервер PyPI с помощью опции `--repository=url`:6061```python62python setup.py sdist bdist_wininst upload -r http://example.com/pypi63```6465См. раздел [*Файл .pypirc*](https://python-all.ru/3.2/distutils/packageindex.html#pypirc) для получения дополнительной информации об определении нескольких серверов.6667Можно использовать опцию `--sign`, чтобы указать **upload** подписывать каждый загружаемый файл с помощью GPG (GNU Privacy Guard). Программа **gpg** должна быть доступна для выполнения в системе `PATH`. Также можно указать, какой ключ использовать для подписи, с помощью опции `--identity=name`.6869Другие опции **upload** включают `--repository=url` или `--repository=section`, где *url* – это URL сервера, а *section* – имя раздела в `$HOME/.pypirc`, и `--show-response` (которая отображает полный текст ответа от сервера PyPI для помощи в отладке проблем с загрузкой).7071## 6.3. Файл .pypirc7273Формат файла `.pypirc` следующий:7475```python76[distutils]77index-servers =78    pypi7980[pypi]81repository: <repository-url>82username: <username>83password: <password>84```8586Раздел *distutils* определяет переменную *index-servers*, которая перечисляет имена всех разделов, описывающих репозиторий.8788Каждый раздел, описывающий репозиторий, задаёт три переменные:8990- ***repository* – задаёт URL сервера PyPI. По умолчанию**9192  `http://www.python.org/pypi`.93- *username* – зарегистрированное имя пользователя на сервере PyPI.94- ***password* – пароль для аутентификации. Если опущен, пользователю**9596  будет предложено ввести его при необходимости.9798Если требуется определить другой сервер, можно создать новый раздел и указать его в переменной *index-servers*:99100```python101[distutils]102index-servers =103    pypi104    other105106[pypi]107repository: <repository-url>108username: <username>109password: <password>110111[other]112repository: http://example.com/pypi113username: <username>114password: <password>115```116117Затем **register** можно вызвать с опцией -r, чтобы указать репозиторий для работы:118119```python120python setup.py register -r http://example.com/pypi121```122123Для удобства также можно использовать имя раздела, описывающего репозиторий:124125```python126python setup.py register -r other127```128129## 6.4. Отображение пакетов PyPI130131Поле `long_description` играет особую роль на PyPI. Оно используется сервером для отображения домашней страницы зарегистрированного пакета.132133Если для этого поля используется синтаксис [reStructuredText](https://python-all.ru/3.2/distutils/packageindex.html), PyPI разберёт его и отобразит домашнюю страницу пакета в формате HTML.134135Поле `long_description` можно прикрепить к текстовому файлу, расположенному в пакете:136137```python138from distutils.core import setup139140with open('README.txt') as file:141    long_description = file.read()142143setup(name='Distutils',144      long_description=long_description)145```146147В этом случае `README.txt` – это обычный текстовый файл reStructuredText, расположенный в корне пакета рядом с `setup.py`.148149Чтобы предотвратить регистрацию некорректного содержимого reStructuredText, можно использовать программу **rst2html**, предоставляемую пакетом `docutils`, и проверить `long_description` из командной строки:150151```python152$ python setup.py --long-description | rst2html.py > output.html153```154155`docutils` выдаст предупреждение, если с синтаксисом что-то не так. Поскольку PyPI применяет дополнительные проверки (например, передавая `--no-raw` в `rst2html.py` в приведённой выше команде), возможность выполнить команду без предупреждений не гарантирует, что PyPI успешно преобразует содержимое.156