Публиковать пакет прямо из рабочего каталога рискованно. Сначала создайте артефакты, проверьте их содержимое и установите 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. Загруженную версию заменить нельзя, поэтому номер должен быть новым.