cython setuptools изменить имя выходного файла - PullRequest
2 голосов
/ 15 января 2020

Я использую 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

Как изменить сгенерированное имя файла?

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Можно обновить целевой переводчик до версии 3.6, если это возможно для вас.

Другой вариант - установить версию 3.5 на компьютер, который вы используете для сборки с этим интерпретатором. Довольно просто установить несколько разных версий интерпретатора python на одном компьютере. Я не знаю ваших особенностей, поэтому не могу предоставить ссылки, но уверен, что быстрый поиск даст вам то, что вам нужно.

0 голосов
/ 29 января 2020

Как указано в комментариях, то, что вы пытаетесь достичь, небезопасно.

Вы можете обойти тег архитектуры с помощью переменной среды _PYTHON_HOST_PLATFORM (например, вы можете изменить ее в своем sitecustomize.py). Но если модули на самом деле несовместимы (и, скорее всего, таковыми являются), вы получите дампы ядра только позже.

Я не думаю, что вы сможете обойти основную версию Python.

Чтобы вернуться к более безопасным местам, я бы попытался положиться на портативные решения. Например, это не выглядит официально, но мы можем найти в Интернете некоторые статьи о Conda и aarch64 (например, вы можете найти «Archiconda»). Еще раз, вы не сможете просто скопировать среды conda с одного компьютера на другой, но вы можете заморозить эти среды (через «экспорт conda») и создать аналогичные на целевой машине.

...