我正在开发一个 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/

10-12 20:16
查看更多