题 是否所有python setuptools的安装后选项都已损坏?


我正在尝试打包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一起使用。有一个 堆栈溢出 答案建议运行easy_install或wheel convert,但这些选项只能解包,它们不会运行安装脚本。否则,您必须更改注册表,这不是一个可接受的解决方案。

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


12
2018-02-01 13:33


起源


可能重复 如何将安装后脚本添加到easy_install / setuptools / distutils? - hoefling


答案:


凯南解释道要获得控制权,必须定义“类安装”来覆盖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},
)

0
2018-01-02 02:56



虽然此链接可能会回答这个问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面发生更改,则仅链接答案可能会变为无效。 - 来自评论 - SherylHohman