cython setuptools更改输出文件名

问题描述 投票:1回答:1

我正在使用cython交叉编译外部python模块。我在主机上使用python3.6,在目标上使用python3.5。我也在目标aarch64的x86_64上编译。

我的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 setuptools distutils
1个回答
0
投票

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

您可以使用环境变量_PYTHON_HOST_PLATFORM解决体系结构标记(例如,可以在sitecustomize.py中对其进行更改)。但是,如果模块实际上是不兼容的(并且很可能是不兼容的),则稍后只会得到核心转储。

我认为您无法解决主要的Python版本。

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

© www.soinside.com 2019 - 2024. All rights reserved.