Python同名目录结构下模块导入失败原因及解决方法咨询
问题原因与解决办法
为什么会报错?
Python模块查找遵循先到先得的规则:一旦在搜索路径的某个位置找到同名的顶层包,就会直接进入该包查找子模块,不会再去后续路径中寻找其他同名包。
你从project_root_dir/subdir目录启动Python解释器时,当前工作目录(即subdir)的优先级高于PYTHONPATH中的所有路径。Python会先找到subdir/a这个顶层包,进入a.b后发现没有test_cases.py文件,直接抛出模块未找到错误,不会再去PYTHONPATH里的project_root_dir目录下查找另一个a包。
解决办法
- 从
project_root_dir目录启动Python解释器,此时当前工作目录下的a包包含test_cases.py,直接执行import a.b.test_cases即可成功导入。 - 在导入前手动调整模块搜索路径,将
project_root_dir放到最前面,覆盖当前工作目录的优先级:import sys sys.path.insert(0, '<workspace_path>/project_root_dir') import a.b.test_cases - 重命名其中一个顶层
a包(比如把subdir/a改为subdir/a_sub),避免同名冲突,之后按新包名导入对应模块。 - 保持PYTHONPATH配置不变,但不要从
subdir目录启动解释器,这样PYTHONPATH中优先级更高的project_root_dir会被优先搜索,能找到包含test_cases.py的a包。
内容的提问来源于stack exchange,提问作者Rachit Tayal
相关产品推荐
相关产品推荐

