我正在开发一个 python2 包,其中 setup.py
包含一些自定义安装命令。这些命令实际上构建了一些 Rust 代码并输出了一些移入 python 包的 .dylib
文件。
重要的一点是 Rust 代码在 python 包之外。setuptools
应该自动检测 python 包是纯 python 还是特定于平台的(例如,如果它包含一些 C 扩展)。
就我而言,当我运行 python setup.py bdist_wheel
时,生成的轮子被标记为纯 python 轮子: <package_name>-<version>-py2-none-any.whl
。
这是有问题的,因为我需要在不同的平台上运行此代码,因此我需要为每个平台生成一个轮子。
有没有办法在构建轮子时强制构建特定于平台?
最佳答案
这是我通常从uwsgi看的代码
基本方法是:
设置文件
# ...
try:
from wheel.bdist_wheel import bdist_wheel as _bdist_wheel
class bdist_wheel(_bdist_wheel):
def finalize_options(self):
_bdist_wheel.finalize_options(self)
self.root_is_pure = False
except ImportError:
bdist_wheel = None
setup(
# ...
cmdclass={'bdist_wheel': bdist_wheel},
)
root_is_pure
位告诉轮子机器构建一个非 purelib ( pyX-none-any
) 轮子。您也可以通过说有二进制平台特定组件但没有 cpython abi 特定组件来获得 fancier。关于python - 如何在构建时强制 python 轮特定于平台?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58786267/