安装轮子后执行后安装脚本
通过使用 from setuptools.command.install import install
,我可以很简单地在运行 python setup.py install
时执行一个自定义的安装后脚本。这其实是很简单的事情。
目前,这个脚本只是打印一些文本,但我希望它能处理一些系统更改,比如在安装新包时备份这个包所使用的数据库。
我想为我的包生成一个 Python wheel 文件,然后把这个文件复制到一组部署机器上进行安装。不过,我发现我的自定义安装脚本在部署机器上并没有被执行。
我哪里做错了?这真的可能吗?
2 个回答
6
不要把包安装和系统部署混在一起
安装Python包(无论使用什么工具或格式)应该专注于让这个包可以在Python代码中使用。
而部署,比如说修改数据库等,完全是另外一回事,应该用其他工具来处理,比如fab、salt-stack等。
有些事情看起来很简单,并不意味着你就应该去做。
这样做的风险是,你可能会让包的安装变得难以重复使用,因为它会被一些与包安装无关的其他事情搞得一团糟。
有些人甚至认为,在安装过程中修改环境的选项是设计上的缺陷,这导致了Python包管理的混乱——可以参考Armin Roacher在Python Packaging: Hate, Hate, Hate Everywhere中的“PTH: 让这一切变得混乱的失败设计”一章。
10
PEP 427 是一个规定了 wheel 包格式的文档,它并没有提供任何关于自定义安装前或安装后脚本的相关内容。
所以,在安装 wheel 包的时候,无法运行自定义脚本。
你需要把自定义脚本放在你包中的一个地方,确保开发者在使用之前先执行这个脚本。