我可以为其他平台创建包含 cython 的包的 wheel 发行版吗?
Can I create wheel distributions of packages containing cython for other platforms?
当我使用包含 cython 代码的包的 python setup.py bdist_wheel
创建轮子分发时,平台标签适合我当前的平台。像 numpy / scipy 这样的项目在网上有很多不同的轮子,我猜他们使用 CI / 像 Travis / Azure Piplelines 这样的 CD 平台。但是,我想知道:我是否可以仅使用我的计算机为除我自己的平台之外的其他平台创建包含 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")
)
简答:没有。
更长的答案:您可以分发 sdist(源代码分发)。这迫使用户编译源代码,因此他们必须安装开发人员工具。 pip install
除了 Cython
之外主要处理编译:您需要先教您的用户安装 Cython
。
详细回答:没有。部分是 Python 的错误,但大部分不是。很多层面都存在问题。首先,交叉编译器存在问题,交联器更是如此。其次,setuptools
不知道任何交叉编译器。
解决方案:构建 C 模块的唯一方法是在虚拟机或 Docker 容器中本地构建它们。
当我使用包含 cython 代码的包的 python setup.py bdist_wheel
创建轮子分发时,平台标签适合我当前的平台。像 numpy / scipy 这样的项目在网上有很多不同的轮子,我猜他们使用 CI / 像 Travis / Azure Piplelines 这样的 CD 平台。但是,我想知道:我是否可以仅使用我的计算机为除我自己的平台之外的其他平台创建包含 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")
)
简答:没有。
更长的答案:您可以分发 sdist(源代码分发)。这迫使用户编译源代码,因此他们必须安装开发人员工具。 pip install
除了 Cython
之外主要处理编译:您需要先教您的用户安装 Cython
。
详细回答:没有。部分是 Python 的错误,但大部分不是。很多层面都存在问题。首先,交叉编译器存在问题,交联器更是如此。其次,setuptools
不知道任何交叉编译器。
解决方案:构建 C 模块的唯一方法是在虚拟机或 Docker 容器中本地构建它们。