安装完轮后安装后脚本

Sar*_*ica 12 python pip setuptools python-wheel

使用from setuptools.command.install import install,如果我运行,我可以轻松运行自定义安装后脚本python setup.py install.这是相当微不足道的.

目前,该脚本除了打印一些文本之外什么都不做,但我希望它能够处理安装新软件包时需要进行的系统更改 - 例如,备份软件包正在使用的数据库.

我想为我的包生成一个Python轮,然后将其复制并安装在一组部署机器上.但是,我的自定义安装脚本不再在部署计算机上运行.

我究竟做错了什么?这甚至可能吗?

won*_*ton 10

PEP 427 which specifies the wheel package format does not leave any provisions for custom pre or post installation scripts.

Therefore running a custom script is not possible during wheel package installation.

您必须将自定义脚本添加到包中您希望开发人员首先执行的位置。


Jan*_*sky 5

不要混装包安装和系统部署

Python 包的安装(使用任何类型的打包工具或格式)应侧重于使该包可从 Python 代码使用。

部署,可能包括数据库修改等肯定超出范围,应由其他工具处理,如 fab、salt-stack 等。

事实上,某件事情看起来相当微不足道并不意味着,人们应该去做。

风险是,你会让你的包安装难以重用,因为它会被其他与纯包安装无关的东西破坏。

钩入安装过程和修改环境的选项甚至被一些人认为是设计缺陷,导致 Python 打包情况大为混乱 - 参见 Armin Roacher 在Python Packaging: Hate, Hate, Hate Everywhere中的章节“PTH: The failed Design that全部启用”

  • 是的,但您没有提供任何替代方案! (12认同)
  • @ankostis 一个简单的选择是:您的软件包将提供两个脚本:“configure”和“run”。`configure` 将执行您期望的安装后挂钩操作。`run`(或者你给它起的任何其他名称)将运行该应用程序。您的安装过程将创建 virtualenv(建议防止破坏系统 Python),将包安装到其中并运行“configure”脚本。请随意使用您喜欢的“configure”命令的任何应用程序前缀。 (2认同)