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

2024-09-28 21:13:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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

如何更改生成的文件名


Tags: frompyimportconfig目标osmybuilder
2条回答

如评论中所述,您试图实现的目标是不安全的

您可以使用环境变量_PYTHON_HOST_PLATFORM处理架构标记(例如,您可以在sitecustomize.py中更改它)。但是,如果模块实际上是不兼容的(而且很可能是不兼容的),那么以后只会得到内核转储

我认为您无法绕过主要的Python版本

为了回到更安全的地方,我会尝试使用便携式解决方案。例如,它看起来并不正式,但我们可以在网上找到一些关于Conda和aarch64的文章(例如,您可以查找“Archiconda”)。再一次,您将无法简单地将conda环境从一台机器复制到另一台机器,但是,您可以冻结这些环境(通过“conda导出”)并在目标机器上构建类似的环境

如果可能的话,可以选择将目标解释器升级到v3.6

另一种选择是在您使用该解释器构建的机器上安装v3.5。在同一台机器上安装几个不同版本的python解释器非常简单。我不知道你的具体情况,所以我不能提供任何链接,但我相信快速搜索会得到你需要的

相关问题 更多 >