Публиковать пакет прямо из рабочего каталога рискованно. Сначала создайте артефакты, проверьте их содержимое и установите wheel в чистое окружение. TestPyPI позволяет испытать процесс без выпуска в основной индекс.

Подготовьте конфигурацию

В pyproject.toml должны быть имя, версия, требования к Python и build backend. Затем установите инструменты в отдельное окружение.

python -m pip install --upgrade build twine
python -m build

В каталоге dist появятся wheel и sdist. Wheel предназначен для установки без сборки исходников, sdist хранит исходный дистрибутив.

Проверьте файлы

python -m twine check dist/*
python -m zipfile -l dist/*.whl

Убедитесь, что внутри есть пакет, лицензия и нужные данные, а секреты, тестовые выгрузки и локальные конфиги отсутствуют.

Загрузка в TestPyPI

python -m twine upload --repository testpypi dist/*

Используйте API-токен и не записывайте его в репозиторий. Официальная инструкция Using TestPyPI предупреждает, что тестовый индекс отделен от основного и может не содержать зависимостей.

Тестовая установка

Создайте новый venv и установите пакет из TestPyPI, при необходимости разрешив зависимости из основного PyPI. Проверьте импорт и консольные команды. Только после этого увеличивайте версию, пересобирайте чистый каталог dist и публикуйте выпуск в PyPI. Загруженную версию заменить нельзя, поэтому номер должен быть новым.