uploading.md
1> **Источник:** https://python-all.ru/3.1/distutils/uploading.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 7. Загрузка пакетов в индекс пакетов89Индекс пакетов Python (PyPI) не только хранит информацию о пакете, но и данные пакета, если того желает автор. Команда distutils **upload** отправляет файлы дистрибутива на PyPI.1011Команда вызывается сразу после сборки одного или нескольких файлов дистрибутивов. Например, команда1213```python14python setup.py sdist bdist_wininst upload15```1617вызовет загрузку исходного дистрибутива и установщика для Windows на PyPI. Обратите внимание, что они будут загружены, даже если были собраны при предыдущем вызове `setup.py`, но загружаются только те дистрибутивы, которые указаны в командной строке вызова, включающего команду **upload**.1819Команда **upload** использует имя пользователя, пароль и URL репозитория из файла `$HOME/.pypirc` (см. раздел [*Файл .pypirc*](https://python-all.ru/3.1/distutils/packageindex.html#pypirc) для получения дополнительной информации об этом файле). Если команда **register** ранее вызывалась в той же команде, и пароль был введён в приглашении, **upload** повторно использует введённый пароль. Это полезно, если вы не хотите хранить пароль в открытом виде в файле `$HOME/.pypirc`.2021Можно указать другой сервер PyPI с помощью опции *--repository=\*url\**:2223```python24python setup.py sdist bdist_wininst upload -r http://example.com/pypi25```2627См. раздел [*Файл .pypirc*](https://python-all.ru/3.1/distutils/packageindex.html#pypirc) для получения дополнительной информации об определении нескольких серверов.2829Можно использовать опцию *--sign*, чтобы указать **upload** подписывать каждый загружаемый файл с помощью GPG (GNU Privacy Guard). Программа **gpg** должна быть доступна для выполнения в системе **PATH**. Также можно указать, какой ключ использовать для подписи, с помощью опции *--identity=\*name\**.3031Другие опции **upload** включают *--repository=* или *--repository=*, где *url* – это URL сервера, а *section* – имя раздела в `$HOME/.pypirc`, и *--show-response* (которая отображает полный текст ответа от сервера PyPI для помощи в отладке проблем загрузки).3233## 7.1. Отображение пакета PyPI3435Поле `long_description` играет особую роль на PyPI. Оно используется сервером для отображения домашней страницы зарегистрированного пакета.3637Если для этого поля используется синтаксис [reStructuredText](https://python-all.ru/3.1/distutils/uploading.html), PyPI разберёт его и отобразит домашнюю страницу пакета в формате HTML.3839Поле `long_description` можно прикрепить к текстовому файлу, расположенному в пакете:4041```python42from distutils.core import setup4344with open('README.txt') as file:45 long_description = file.read()4647setup(name='Distutils',48 long_description=long_description)49```5051В этом случае `README.txt` – это обычный текстовый файл reStructuredText, расположенный в корне пакета рядом с `setup.py`.5253Чтобы предотвратить регистрацию некорректного содержимого reStructuredText, можно использовать программу **rst2html**, которая предоставляется пакетом `docutils`, и проверить `long_description` из командной строки:5455```python56$ python setup.py --long-description | rst2html.py > output.html57```5859`docutils` выведет предупреждение, если с синтаксисом что-то не так.60