一尘不染

构建它时如何强制python wheel特定于平台?

python

我正在使用其中setup.py包含一些自定义安装命令的python2软件包。这些命令实际上构建了一些Rust代码,并输出了一些.dylib移入python包的文件。

重要的一点是,Rust代码在python包之外。

setuptools应该自动检测python软件包是纯python还是平台特定的(例如,如果它包含某些C扩展名)。就我而言,当我跑步时pythonsetup.py bdist_wheel,生成的车轮被标记为纯python车轮:<package_name>-<version>-py2-none-any.whl。这是有问题的,因为我需要在不同的平台上运行此代码,因此需要在每个平台上生成一个轮子。

有没有办法在构建轮子时强制构建特定于平台?


阅读 142

收藏
2020-12-20

共1个答案

一尘不染

这是我通常从uwsgi查看的代码

基本方法是:

setup.py

# ...

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钻头告诉车轮机械制造一个非纯正pyX-none- any车轮。您还可以得到票友说有 二进制
平台相关的组件,但没有 CPython的ABI 特定组件。

2020-12-20