我正在尝试打包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,但这些选项只能解包,它们不会运行安装脚本。否则你必须更改注册表,这不是一个可接受的解决方案。
我错过了什么?有可行的选择吗?
答案 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},
)