执行build_ext后仍遇ModuleNotFoundError: No module named 'lib.rcnn.cython.bbox'
问题描述
接手一个需重写的项目,无法联系原开发者,代码片段如下:
from ..cython.bbox import bbox_overlaps_cython def bbox_overlaps(boxes, query_boxes): return bbox_overlaps_cython(boxes, query_boxes)
运行时触发报错:
from ..cython.bbox import bbox_overlaps_cython ModuleNotFoundError: No module named 'lib.rcnn.cython.bbox'
已在setup.py所在目录执行python3 setup.py build_ext --inplace编译,但错误未解决。项目目录结构如下:
rcnn --cython ----bbox.pyx ----setup.py --processing ----bbox_transform.py
解决方法
检查setup.py配置
打开rcnn/cython/setup.py,确认扩展模块的编译配置正确,确保编译产物输出到当前cython目录。参考配置示例:from distutils.core import setup from Cython.Build import cythonize import numpy as np setup( ext_modules=cythonize("bbox.pyx"), include_dirs=[np.get_include()] )若配置中指定了输出路径,需确认路径指向
rcnn/cython。确认编译产物
执行编译命令后,检查rcnn/cython目录下是否生成了类似bbox.cpython-xxx.so(Linux/macOS)或.pyd(Windows)的文件。如果没有,查看编译终端输出,排查依赖缺失问题(需提前安装Cython、numpy、gcc等编译工具)。修复导入路径
- 若
rcnn是项目根目录,在bbox_transform.py开头添加代码,将rcnn的父目录加入Python路径:import sys from pathlib import Path sys.path.append(str(Path(__file__).parent.parent)) - 或者改用绝对导入,假设
rcnn是顶层包,修改导入语句为:from rcnn.cython.bbox import bbox_overlaps_cython
- 若
补全包结构
在rcnn和rcnn/cython目录下分别创建空的__init__.py文件,让Python识别这些目录为合法包。
内容的提问来源于stack exchange,提问作者aestetor
相关产品推荐
相关产品推荐

