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

使用Cython打包多个.pyx文件为单个Python包时遇文件查找失败问题

Cython include文件找不到的问题:原因与解决方法

问题原因

当Cython编译mypkg/main.pyx时,默认工作目录是项目根目录,而非mypkg子目录。你在main.pyx中使用include "add.pyx"时,Cython会在根目录下查找该文件,但实际add.pyx和prod.pyx都在mypkg子目录里,因此出现找不到文件的错误。

解决方法

两种可靠方案任选其一即可:

方案1:在Extension配置中添加include搜索目录

修改setup.py中的Extension定义,添加include_dirs参数,指定mypkg为Cython的搜索目录:

from Cython.Distutils.build_ext import new_build_ext
from setuptools import setup
from setuptools.extension import Extension

ext_modules = [
Extension(
    "mypkg.main",
    sources=["mypkg/main.pyx"],
    include_dirs=["mypkg"],  # 新增:将mypkg加入搜索路径
),
]

setup(
    ext_modules=ext_modules,
    cmdclass={"build_ext": new_build_ext},
    requires=['cython'],
)

此修改后,Cython编译时会自动去mypkg目录查找目标文件,原main.pyx中的include语句无需改动。

方案2:修改include语句的路径

直接在mypkg/main.pyx中使用相对于项目根目录的完整路径:

include "mypkg/add.pyx"
include "mypkg/prod.pyx"

这种方式无需修改setup.py,Cython会直接从根目录定位到目标文件。

验证构建与使用

修改完成后,按以下步骤验证:

  1. 清理残留构建文件(可选):删除build、dist和mypkg.egg-info目录
  2. 构建包:python -m build
  3. 安装包:pip install dist/mypkg-0.1.0.tar.gz(或对应wheel文件)
  4. 测试功能:
import mypkg.main
print(mypkg.main.add(1.0, 2.0))  # 输出3.0
print(mypkg.main.prod(2.0, 3.0)) # 输出6.0

内容的提问来源于stack exchange,提问作者ysroh260

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:59:58