在 Windows 上通过 pip 安装 Cython 模块时出现 ModuleNotFoundError,但在 Linux 上则不然

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

我正在尝试在包含一些 cython 代码的文件夹

mymodule
中构建一个 python 模块。然而,在Windows上,通过pip安装它,即使安装了它也找不到Cython。在Linux上,不会出现这样的问题。

作为一个最小的例子,假设我有一个 cython 文件

calculations.pyx
和一个
setup.py

mymodule
|
|-- calculations.pyx
+-- setup.py

setup.py
看起来像这样:

from setuptools import setup, Extension
from Cython.Build import cythonize

setup(
    name='mymodule',
    version='0.1',
    
    install_requires=['Cython'],
    ext_modules=cythonize(Extension(
        'calculations',
        sources=['calculations.pyx'],
    )),
)

当我在 Linux 上安装此模块 (

pip install -e mymodule
) 时,该模块会正确安装,并且 cython 会构建二进制文件。当我尝试在 Windows 上安装该模块时,出现
ModuleNotFoundError: No module named 'Cython'
错误。但是,如果我自己使用
python setup.py build_ext --inplace
构建扩展,它就可以正常工作。

我已验证 Cython 已安装。即使没有安装,也应该在运行

pip install -e mymodule
命令后安装,因为它列在
install_requires
列表中。我已经在 Linux 上验证了这一点,如果在运行
setup.py
之前不存在 Cython,则 Cython 已正确安装为依赖项。

这可能是什么问题? 另外,我只安装了一个 Python 版本,而不是多个。

python cython cythonize
1个回答
0
投票

对于任何有同样问题的人:我找到了一个可以解决问题的解决方案,尽管我不明白为什么。通过将

pyproject.toml
文件放在根目录
mymodule
中,该文件告诉 pip 运行
setup.py
所需的包。来源:https://cython.readthedocs.io/en/latest/src/userguide/source_files_and_compilation.html

toml 文件:

[build-system]
requires = ["setuptools", "Cython"]

现在它可以运行并编译了。然而,我仍然不明白为什么它在 Linux 上工作,也不明白为什么它在 Windows 上不起作用,即使我已经安装了 cython alredy。

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