Как отключить загрузку пакета в PyPi, если --public не передан команде загрузки

Я разрабатываю пакеты и загружаю версии моих пакетов для разработки / тестирования / и т. Д. На локальный сервер devpi.

Чтобы предотвратить случайную загрузку в PyPi, я принял общепринятую практику:

setup(...,
      classifiers=[
        "Programming Language :: Python",
        "Programming Language :: Python :: 2",
        "Programming Language :: Python :: 2.7",
        "Private :: Do not Upload"
     ],
     ...)

который прекрасно работает, но что делать, когда я наконец готов загрузить пакет в PyPi?

Я придумал совершенно некрасивый, но простой взлом, который требует, чтобы я определил классификаторы как глобальную переменную вне вызова setup (), который выглядит следующим образом:

CLASSIFIERS = [
    "Programming Language :: Python",
    "Programming Language :: Python :: 2",
    "Programming Language :: Python :: 2.7"
]


if "--public" not in sys.argv:
     CLASSIFIERS.append("Private :: Do Not Upload")
else:
     sys.argv.remove("--public")

setup(...
      classifiers=CLASSIFIERS,
      ...)

Другой, и, возможно, более простой вариант - просто закомментировать «Private :: Do not Upload», но это не кажется более профессиональным, чем мой хак.

Что бы ялайк чтобы сделать, это создать правильный подкласс команды загрузки под названиемSafeUpload и проверить это для--public опция cmd-line. Возможно, поскольку сборка может существовать до загрузки,SafeBuild может быть лучшим вариантом.

К сожалению, у меня проблемы с пониманием документации setuptools по созданию пользовательских команд.

У кого-нибудь есть идеи, как это реализовать? Мне не ясно, имеет ли пользовательская команда доступ к параметрам, переданным вsetup()то есть он мог напрямую манипулироватьclassifiers перешел кsetup()или потребует, чтобы пользователь команды следовал соглашению об определении CLASSIFIERS в качестве глобальной переменнойдрянь?

Ответы на вопрос(1)

Ваш ответ на вопрос