Python cython设置工具更改输出文件名

Python cython设置工具更改输出文件名,python,setuptools,distutils,Python,Setuptools,Distutils,我正在使用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 imp

我正在使用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\u ext-I
时,我得到一个名为my\u ext.cpython-36m-x86\u 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解释器非常简单。我不知道您的具体情况,因此无法提供任何链接,但我相信快速搜索将为您提供所需信息。

也许这会有所帮助:您尝试的操作并不安全;实际上,使用Python3.6编译很可能依赖于Python3.5中没有的特性。简单地更改名称将允许您尝试导入它,但它可能会以某种方式被破坏。除非您正在使用(Cython肯定不会),否则您不能为任何Python次要版本编译,并且期望相同的二进制文件在不同的次要版本上工作。