You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地开发Cython包:可编辑安装遇ModuleNotFoundError问题

解决Cython包开发模式下的模块找不到问题

问题原因

用pip install -e安装纯Python包时,Python直接从源码目录加载模块,但Cython的.pyx文件需要编译成共享库文件(.so/.pyd)才能被Python识别。默认编译流程会把产物放在build目录,而开发模式下Python不会从build目录加载模块,导致出现ModuleNotFoundError。

解决步骤

1. 确保setup.py配置正确

你的setup.py必须正确声明Cython扩展模块,示例如下:

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

setup(
    name="my_package",
    packages=find_packages(),
    ext_modules=cythonize(
        # 指定你的Cython文件路径
        "my_package/sub/cython_code.pyx",
        # 指定Python版本,匹配你的开发环境
        compiler_directives={"language_level": "3"}
    )
)

如果你的Cython代码依赖numpy,需要添加include_dirs参数:

import numpy as np

# ... 在setup函数中添加
include_dirs=[np.get_include()]

2. 编译并安装开发版包

在包含setup.py的根目录(即外层my_package/)执行以下命令:

# 先清理旧的编译产物(可选但推荐)
rm -rf build/ my_package/sub/*.c my_package/sub/*.so

# 编译Cython模块并安装开发版
pip install -e .

这个命令会自动编译.pyx文件,并将编译后的共享库文件复制到my_package/sub/目录下,这样Python就能通过相对导入找到模块。

3. 修改Cython代码后的更新

每次修改cython_code.pyx后,需要重新编译安装:

pip install -e .

或者单独执行编译命令:

python setup.py build_ext --inplace

--inplace参数会直接将编译产物生成到源码目录,无需重新执行pip install -e。

验证

安装完成后,在虚拟环境中运行你的Python代码,from .cython_code import cython_function应该可以正常导入,不会再出现模块找不到的错误。

内容的提问来源于stack exchange,提问作者L.A.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 03:10:44