跨Python文件调用时找不到Cython编译的device扩展模块如何解决
问题原因
- 单独运行包含
import device的脚本时,Python会自动将该脚本的所在目录加入模块搜索路径sys.path,因此可以正常识别编译好的device扩展模块。 - 从其他目录下的
camera.py导入对应函数时,device模块所在的目录不在Python的默认搜索路径范围内,因此抛出ModuleNotFoundError。
解决方案
方案1:临时添加模块搜索路径
在导入device的代码前,先将device模块所在的目录加入sys.path:
import sys import os # 替换为device扩展模块实际存放目录的绝对路径 sys.path.append(os.path.abspath("/your/path/to/device_module_dir")) import device
如果是同项目内调用,也可以用__file__计算相对路径,避免写死绝对路径。
方案2:全局/虚拟环境安装扩展模块
在Cython代码的setup.py所在目录下,执行安装命令,将device模块安装到Python的第三方库目录:
# 全局安装,安装后所有项目都可以直接导入 python setup.py install # 开发模式安装,修改Cython代码重新编译后无需重复安装 python setup.py develop
如果使用虚拟环境,执行安装前需要先激活对应的虚拟环境,避免模块安装到环境外的Python路径中。
方案3:调整文件存放位置
将编译生成的device扩展模块文件,移动到camera.py的同级目录下,Python会默认搜索当前运行文件的所在目录,即可直接导入。
内容的提问来源于stack exchange,提问作者Xuanyuan Zhang
相关产品推荐
相关产品推荐

