Публикация с помощью twine
Загружайте пакеты в PyPI
«Публикация с помощью twine» — бесплатный урок Python Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.
Последний шаг
Вы собрали артефакты в dist/. Последний шаг — загрузить их в PyPI, чтобы любой желающий мог установить Ваш пакет с помощью pip install. Стандартный инструмент для этого — twine.
twine безопасно загружает файлы по HTTPS и проверяет артефакты перед отправкой.
Установка twine
Установите его с помощью pip install twine. Это небольшой специализированный инструмент: его задача — только проверять и загружать файлы из dist/. Он ничего не собирает.
Сначала TestPyPI
Для репетиции загрузок существует отдельная песочница — TestPyPI. Сначала опубликуйте пакет там, чтобы обнаружить проблемы и не засорять настоящий индекс. Имена и версии в TestPyPI не зависят от PyPI.
Загрузите пакет с помощью twine upload --repository testpypi dist/*.
Проверка перед загрузкой
twine check dist/* проверяет, что метаданные и расширенное описание будут корректно отображаться в PyPI. Запускайте эту проверку каждый раз: иначе поврежденное описание из README может отображаться на странице проекта как обычный текст.
files = ['mytool-0.1.0.tar.gz', 'mytool-0.1.0-py3-none-any.whl']
for f in files:
status = 'PASSED' if f.endswith(('.gz', '.whl')) else 'SKIP'
print('check', f, '->', status)Токены API, а не пароли
Для аутентификации используйте токен API из своей учетной записи PyPI, а не пароль. В качестве имени пользователя укажите __token__, а в качестве пароля — токен, начинающийся с pypi-. Для токенов можно ограничить область действия одним проектом и в любое время отозвать их.
username = '__token__'
token = 'pypi-AgEIcHl...'
print('Username:', username)
print('Token starts with:', token[:5])
print('Never commit the token to git')Хранение учетных данных
Чтобы не вводить токены повторно, храните их в файле ~/.pypirc или в переменных окружения (TWINE_USERNAME, TWINE_PASSWORD). Храните этот файл вне системы контроля версий и разрешите чтение только себе.
Загрузка в PyPI
После успешной проверки в TestPyPI опубликуйте пакет по-настоящему с помощью twine upload dist/*. Через несколько мгновений Ваш пакет можно будет устанавливать по всему миру. Отменить публикацию нельзя: после удаления версии невозможно повторно загрузить ту же версию.
Версии неизменяемы
PyPI никогда не позволяет перезаписывать опубликованную версию. Если после публикации Вы обнаружили ошибку, необходимо выпустить новую версию, например увеличив номер PATCH. Встройте это правило в рабочий процесс, чтобы никогда не оказаться в тупике.
published = {'1.0.0', '1.0.1'}
new_version = '1.0.1'
if new_version in published:
print(new_version, 'already on PyPI - bump and rebuild')
else:
print(new_version, 'is free to upload')Проверьте установку
После загрузки убедитесь, что всё работает: создайте новое виртуальное окружение и выполните pip install mytool, затем импортируйте пакет. Установка в чистом окружении позволяет обнаружить отсутствующие файлы и ошибки в зависимостях, которые не выявила сборка.
Доверенная публикация
Современные проекты могут отказаться от ручного использования токенов благодаря доверенной публикации: PyPI напрямую аутентифицирует процесс CI, например GitHub Actions, через OpenID Connect. Долгосрочный секрет нигде не хранится, что повышает безопасность.
Загрузку по-прежнему выполняет twine, но учетные данные действуют недолго и выдаются во время запуска.
Автоматизация выпусков
Распространенная настройка запускает выпуск, когда Вы отправляете метку git, например v1.0.0. Процесс CI автоматически собирает пакет, выполняет twine check и загружает его. Создание метки становится единственным действием, необходимым для публикации версии.
Это делает выпуски единообразными и устраняет ошибки ручной загрузки.
Быстрая проверка
Проверьте свои знания о публикации пакетов.
Итоги
Вы опубликовали пакет:
pip install twine, затемtwine check dist/*- Сначала репетировать публикацию в TestPyPI, а уже потом загружать пакет в настоящий индекс
- Проходить аутентификацию с помощью ограниченного токена API (
__token__), а не пароля twine upload dist/*публикует пакет; версии неизменяемы, поэтому для исправления ошибок нужно увеличить номер версии- Проверять результат с помощью чистой установки через
pip install
Часто задаваемые вопросы
Урок «Публикация с помощью twine» бесплатный?
Да — полный текст урока «Публикация с помощью twine» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.
Чему я научусь в уроке «Публикация с помощью twine»?
Загружайте пакеты в PyPI Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Python Academy?
Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Публикация с помощью twine»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Python Academy?
Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Структура проекта и pyproject.toml
- Сборка с помощью build
- Версии и метаданные
- Публикация с помощью twine