Python2.7运行脚本报No module named src.results错误排查
问题根因
- 核心原因:Python 2.7 不支持Python3.3+引入的隐式命名空间包特性,所有可被导入的包目录下必须存在
__init__.py文件(内容可以为空),否则解释器不会将对应目录识别为合法Python包。你的src、src/results目录大概率缺失该标识文件,这是导入失败的直接诱因。 - 配置错误:你配置PYTHONPATH的逻辑有误。导入语句
from src.results import *的搜索逻辑是:遍历sys.path下的所有路径,寻找名为src的包/模块,再从其中加载results。因此只需要将src的父目录(即项目根目录/home/bojanpoletan/Proj)加入搜索路径即可,你额外添加的src、src/results子目录路径属于冗余配置,无法帮助完成该导入语句,极端情况还会打乱模块搜索优先级。 - 运行路径错误:如果启动脚本时当前工作目录不是
bks-cascade.py所在的项目根目录,Python会自动将脚本所在的错误路径加入sys.path头部,也会触发找不到模块的报错。
解决步骤
- 清理冗余的PYTHONPATH配置,使用绝对路径指定项目根目录为搜索路径,避免相对路径随工作目录变化失效,执行命令:
export PYTHONPATH="/home/bojanpoletan/Proj:$PYTHONPATH"
- 补全包必需的
__init__.py标识文件:- 进入项目根目录:
cd /home/bojanpoletan/Proj - 为src目录创建空标识文件:
touch src/__init__.py - 如果
src/results是目录(而非单个results.py文件),为该目录也创建标识文件:touch src/results/__init__.py
- 进入项目根目录:
- 始终在项目根目录下启动脚本,不要在src等子目录下运行:
cd /home/bojanpoletan/Proj python bks-cascade.py
验证方法
配置完成后可以先执行单行命令验证导入是否正常,无任何输出即代表导入链路正常:
python -c "from src.results import *"
内容的提问来源于stack exchange,提问作者Bog Alt
相关产品推荐
相关产品推荐

