使用python-prodj-link项目时跨父子文件夹导入出现ImportError
导入报错根因
你配置的sys.path路径错位,完全不匹配原项目的导入规则:
- 原项目内部所有代码都用
prodj.xxx格式的绝对导入,这类导入要求Python能在模块搜索路径中,定位到prodj文件夹的上层父目录,才能顺着包层级解析所有子模块 - 你现在追加到
sys.path的是/home/pi/Documents/Python/ProLinkTest/prodj,也就是prodj文件夹本身的路径,这个路径下直接存放的是core子目录,根本不存在prodj这个顶级目录层级,自然没法匹配内部代码的导入要求。
之前Main.py里的导入能暂时跑通,是错误路径带来的偶然效果:Python在prodj路径下直接找到了core/prodj.py文件,跳过了包层级校验,但进入prodj.py执行内部导入时,Python找不到prodj这个顶级包,就抛出了ImportError: No module named core.clientlist的报错。
修复步骤
- 修正
sys.path的追加路径
把原来指向prodj文件夹本身的路径,改为指向prodj的父目录(也就是项目根目录):
不想写死绝对路径的话,可以用代码自动定位项目根目录,兼容性更强:import sys # 替换原来的错误路径 sys.path.append("/home/pi/Documents/Python/ProLinkTest") from prodj.core.prodj import ProDjimport sys from pathlib import Path # 自动获取Main.py所在的项目根目录 project_root = Path(__file__).parent.resolve() sys.path.append(str(project_root)) - 补全包结构的必要标识文件
Python需要靠目录下的__init__.py文件识别可导入的包,你当前的目录结构缺这些文件,需要在对应位置创建空文件:ProLinkTest ├── Main.py ├── __init__.py └── prodj ├── __init__.py └── core ├── __init__.py ├── prodj.py └── clientlist.py - 补全缺失的子模块
你当前的目录里没有vcdj.py、dataprovider.py这些内部导入依赖的文件,等路径修正后,如果遇到同类找不到模块的报错,把对应路径下的文件从原项目补全即可。
内容的提问来源于stack exchange,提问作者Chrasonier
相关产品推荐
相关产品推荐

