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

时间:2014-02-01 13:33:25

标签: 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不兼容。有一个stackoverflow答案建议运行easy_install或wheel convert,但这些选项只能解包,它们不会运行安装脚本。否则你必须更改注册表,这不是一个可接受的解决方案。

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

1 个答案:

答案 0 :(得分: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},
)