【发布时间】:2020-01-15 12:10:12
【问题描述】:
我正在使用 cython 交叉编译外部 python 模块。我在主机上使用python3.6,在目标上使用python3.5。我也在 x86_64 上为目标 aarch64 编译。
我的 setup.py 看起来像:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
from Cython.Distutils import build_ext
import builder_config
import os
os.environ["PATH"] = builder_config.PATH
os.environ["CC"] = builder_config.COMPILER
os.environ["LDSHARED"] = builder_config.COMPILER + " -lpython3.5m -shared"
os.environ["CFLAGS"] = builder_config.CFLAGS
os.environ["LDFLAGS"] = builder_config.LDFLAGS
os.environ["ARCH"] = "aarch64"
setup(
ext_modules = cythonize((Extension("my_ext", ["file1.pyx", "file2.pyx", "file3.pyx", "file4.pyx", "file5.pyx"]))),
)
当我运行python3.6 setup.py build_ext -i 时,我得到一个名为:my_ext.cpython-36m-x86_64-linux-gnu.so 的文件
我的问题是,除非将名称更改为,否则不会在目标上加载库:
my_ext.cpython-35m-aarch64-linux-gnu.so
如何更改生成的文件名?
【问题讨论】:
-
您尝试做的事情并不安全;实际使用 Python 3.6 编译很可能会依赖 Python 3.5 中不存在的特性。只需更改名称即可尝试导入它,但它可能会以某种方式被破坏。除非您使用 stable ABI(而且 Cython 肯定不会),否则您不能为 Python 的 any 次要版本编译并期望相同的二进制文件在不同的次要版本上工作。
标签: python setuptools distutils