Могу ли я создать колесные дистрибутивы пакетов, содержащих cython для других платформ? - PullRequest
0 голосов
/ 17 февраля 2020

Когда я создаю дистрибутив колеса с python setup.py bdist_wheel пакета, содержащего код Cython, тег платформы подходит для моей текущей платформы. Такие проекты, как numpy / scipy, имеют много разных онлайн-каталогов, и я полагаю, что они используют платформы CI / CD, такие как Travis / Azure Piplelines. Однако мне было интересно: могу ли я создавать колесные дистрибутивы пакетов, содержащих cython для других платформ, кроме моей, используя только мой компьютер?

MVCE

fib.pyx

def fib_iterative_cython(int n):
        cdef long long a = 0
        cdef long long b = 1
        for i in range(n - 1):
            a, b = b, a + b
        return b

setup.py

from setuptools import setup
from Cython.Build import cythonize

setup(
    ext_modules = cythonize("fib.pyx")
)

1 Ответ

1 голос
/ 17 февраля 2020

Краткий ответ: нет.

Более длинный ответ: вы можете распространять sdist (источник распространения). Это вынуждает пользователей компилировать исходники, поэтому им приходится устанавливать инструменты разработчика. pip install в основном обрабатывает компиляцию, кроме Cython: вам нужно научить пользователей сначала устанавливать Cython.

Подробный ответ: нет. Частично это ошибка Python, но в основном нет. Есть проблемы на многих уровнях. Во-первых, кросс-компиляторы проблематичны c, а кросс-линкеры тем более. Во-вторых, setuptools не знает кросс-компилятора.

Решение: единственный способ построить C -модули - это встроить их в виртуальные машины или Docker контейнеры.

...