Skip to main content
 首页 » 编程设计

python之使用预编译的扩展包生成依赖于 Python 版本的安装程序

2025年05月04日6freeliver54

我正在尝试为包含预编译扩展模块的 Python 包创建安装程序(使用 distutils),该扩展模块使用“package_data”关键字参数包含在内。我的 setup.py 看起来像这样:

from distutils.core import setup 
setup(name="Foobar", 
      ... 
      packages = ['Foobar'], 
      package_data = {'Foobar': '_foobar.pyd'}) 

但是,使用 python setup.py bdist_msi 构建此包会生成一个安装程序,该安装程序将为任何版本的 Python 安装(名为 Foobar-1.0.win-amd64.msi ),即使扩展模块只与编译它的 Python 版本兼容。

有什么方法可以告诉 distutils 创建一个需要兼容 Python 版本的安装程序,类似于使用 distutils 编译扩展模块时生成的安装程序(生成一个名为 Foobar-1.0.win-amd64 的安装程序-py2.7.msi)

到目前为止,我想出的最好的解决方案是包含一个额外的(虚拟的)扩展包,但这似乎有些笨拙并且会产生一些额外的问题。

请您参考如下方法:

这可以使用 --target-version 参数来完成,例如

python setup.py bdist_msi --target-version=2.7 

Distutils documentation在引用 bdist_rpm 命令时提到了此选项,但它也适用于 bdist_msi。