【问题标题】:Post install script after installing a wheel安装轮子后安装脚本
【发布时间】:2014-08-07 11:07:35
【问题描述】:

使用from setuptools.command.install import install,如果我运行python setup.py install,我可以轻松运行自定义的安装后脚本。这是fairly trivial 要做的。

目前,脚本只打印一些文本,但我希望它处理安装新软件包时需要发生的系统更改 - 例如,备份软件包正在使用的数据库。

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

我做错了什么?这可能吗?

【问题讨论】:

    标签: python pip setuptools python-wheel


    【解决方案1】:

    不要把包安装和系统部署混在一起

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

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

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

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

    挂钩安装过程和修改环境的选项甚至被一些人认为是设计缺陷,导致 Python 打包情况大混乱 - 请参阅 Python Packaging: Hate, Hate, Hate Everywhere 中的 Armin Roacher,章节“PTH:启用这一切的失败设计"

    【讨论】:

    • 是的,但您不提供任何替代方案!
    • @ankostis 一个简单的选择是:您的包将提供两个脚本:configurerunconfigure 会做你对安装后挂钩的期望。 run(或您给它的任何其他名称)将运行该应用程序。您的安装过程将创建 virtualenv(建议以防止破坏系统 Python),将包安装到其中并运行 configure 脚本。随意为您喜欢的configure 命令使用任何应用程序前缀。
    • 谢谢。非常烦人,但至少它是一个真正的答案。我花了几天时间试图找到有关此问题的任何信息。
    • FWIW 在切换到基于轮子的发行版后遇到这个问题后,我最终为我的项目编写了一个简单的基于 GUI 的配置工具,它可以执行一些安装后的工作(在这种情况下,创建配置文件夹 + 文件到 Windows 用户目录和桌面启动器)。因为它可能对最终来到这里的人有用,所以我将分享链接:github.com/KBNLresearch/iromlab/blob/master/iromlab/…> 请注意,实际的安装后代码在 post_install 函数中。另请注意,其中的一些代码是特定于 Windows 的。
    • setuptools entry_points 非常适合我在我的模块中实现 configure 入口点。 Wheel 安装后,每个入口点都会在用户路径中创建为 shell 脚本。
    【解决方案2】:

    PEP 427 指定了 wheel 包格式,不会为自定义安装前或安装后脚本留下任何规定。

    因此,在安装 wheel 包期间无法运行自定义脚本。

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

    【讨论】:

      猜你喜欢
      • 2019-09-04
      • 2015-02-11
      • 2017-03-29
      • 1970-01-01
      • 2020-03-25
      • 2023-01-20
      • 2017-08-02
      • 2020-01-24
      • 2016-12-29
      相关资源
      最近更新 更多