Bre*_*yer 14 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,但这些选项只解包,他们不会运行安装脚本.否则,您必须更改注册表,这不是一个可接受的解决方案.
我错过了什么?有可行的选择吗?
正如kynan 所解释的,为了获得控制权,必须定义“类安装”来覆盖 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},
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
561 次 |
| 最近记录: |