【问题标题】:Are all post-install options for python setuptools broken?python setuptools的所有安装后选项都损坏了吗?
【发布时间】:2014-02-25 05:54:15
【问题描述】:

我正在尝试打包 PyQt 的构建(没有为我需要的配置提供安装程序),但我找不到任何有效的打包配置。不过,这个问题并不是 PyQt 特有的。

问题:为了使模块工作,它需要一个位于 python 的 PREFIX 目录中的文件。我知道这可能是错误的形式,但就我而言,那里需要一个 qt.conf 文件,除了使文件可用之外,我无能为力。我需要能够运行安装后脚本来创建包含已安装 PyQt 路径的文件。或者至少这似乎是最好的解决方案。

我看过的选项:

  • 我可以使用 python setup.py install 并覆盖 setuptools.command.install 类。但是,这在手动运行 setup.py 时有效,并且需要解压缩 bdist 并在包文件夹中具有 cmd 提示符。它不适用于 bdist_wininst、bdist_msi 或 bdist_wheel,它们安装起来更方便(打包点)。很有可能,但不是一个很好的解决方案。

  • bdist_wheel 似乎是一个不错的选择,但它不会在安装后运行任何东西,并且只会将文件放在特定文件夹中,不包括 PREFIX。

  • bdist_wininst 支持安装后脚本(在创建包时通过 --install-script 开关),但不能很好地与 virtualenv 配合使用。有一个stackoverflow 答案建议运行easy_install 或wheel convert,但这些选项仅解包,它们不会运行安装脚本。否则您必须更改注册表,这是不可接受的解决方案。

我错过了什么?有可行的选择吗?

【问题讨论】:

标签: python setuptools


【解决方案1】:

作为kynan explains,要获得控制权,必须定义“类安装”来覆盖run()。

编辑

引用他提供的代码:

import os, sys
from distutils.core import setup
from distutils.command.install import install as _install


def _post_install(dir):
    from subprocess import call
    call([sys.executable, 'scriptname.py'],
         cwd=os.path.join(dir, 'packagename'))


class install(_install):
    def run(self):
        _install.run(self)
        self.execute(_post_install, (self.install_lib,),
                     msg="Running post install task")


setup(
    ...
    cmdclass={'install': install},
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 2016-03-17
    • 2020-06-03
    相关资源
    最近更新 更多