python -m utils.clean --input data.csv # 临时方案 PYTHONPATH=. python utils/clean.py
直接跑子目录脚本抛 ModuleNotFoundError: No module named ‘common’,换到根目录就正常。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,直接跑单个文件时它所在目录被当成顶层,这种相对导入在脚本入口没有父包,解释器无从解析,只能报找不到模块。
围绕「Python 相对导入」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
报错里带路径的,先去看那个路径在不在、权限对不对。
处理上按这个顺序:改成 python -m 包名.模块 以模块方式运行;把入口脚本挪到项目根目录再 import;确认包内每一层都有初始化文件,缺一层都不行。
改完只确认一件事:两种方式都能导入成功,脚本不再报 No module named。