После установки колеса script после установки колеса

Используя from setuptools.command.install import install, я могу легко запустить пользовательскую пост-установку script, если я запустил python setup.py install. Это довольно тривиально.

В настоящее время script ничего не делает, кроме как напечатать некоторый текст, но я хочу, чтобы он имел дело с системными изменениями, которые должны произойти, когда установлен новый пакет, например, резервное копирование базы данных, используемой пакетом.

Я хочу создать колесо Python для своего пакета, а затем скопировать его и установить на набор машин для развертывания. Однако моя пользовательская установка script больше не запускается на машине развертывания.

Что я делаю неправильно? Возможно ли это?

Ответ 1

Не смешивать установку пакета и развертывание системы

Установка пакетов Python (с использованием любых видов упаковочных инструментов или форматов) должна сфокусироваться на том, чтобы сделать этот пакет пригодным для использования с кодом Python.

Развертывание, что может включать изменения базы данных и т.д., безусловно, выходит за рамки и должно обрабатываться другими инструментами, такими как fab, salt-stack и т.д.

Тот факт, что что-то кажется довольно тривиальным, не означает, что он должен это делать.

Риск заключается в том, что ваша установка пакета будет сложной для повторного использования, поскольку она будет испорчена другими вещами, которые не связаны с установкой чистого пакета.

Возможность подключиться к процессу установки и изменения среды - некоторые люди даже считают недостаток в дизайне, вызывая большой беспорядок в ситуации упаковки Python - см. Armin Roacher в Python Packaging: Hate, Hate, Hate Everywhere, глава "PTH: неудачный проект, который включил все"

Ответ 2

PEP 427, который задает формат пакета колеса, не оставляет никаких условий для пользовательских сценариев до или после установки.

Поэтому запуск собственного сценария невозможен во время установки пакета колеса.

Вам нужно будет добавить пользовательский скрипт в место в вашем пакете, где вы ожидаете, что разработчик выполнит его первым.