我正在使用cython交叉编译外部python模块。我在主机上使用python3.6,在目标上使用python3.5。我还在x86_64上编译目标aarch64
My 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_HOST_PLATFORM处理架构标记(例如,您可以在sitecustomize.py中更改它)。但是,如果模块实际上是不兼容的(而且很可能是不兼容的),那么以后只会得到内核转储
我认为您无法绕过主要的Python版本
为了回到更安全的地方,我会尝试使用便携式解决方案。例如,它看起来并不正式,但我们可以在网上找到一些关于Conda和aarch64的文章(例如,您可以查找“Archiconda”)。再一次,您将无法简单地将conda环境从一台机器复制到另一台机器,但是,您可以冻结这些环境(通过“conda导出”)并在目标机器上构建类似的环境
如果可能的话,可以选择将目标解释器升级到v3.6
另一种选择是在您使用该解释器构建的机器上安装v3.5。在同一台机器上安装几个不同版本的python解释器非常简单。我不知道你的具体情况,所以我不能提供任何链接,但我相信快速搜索会得到你需要的
相关问题 更多 >
编程相关推荐