我有以下目录结构:
project_root_dir
├── a
│ └── b
│ ├── __init__.py
│ └── test_cases.py
└── subdir
└── a
└── b
└── __init__.py
我的
PYTHONPATH
环境设置如下:
export PYTHONPATH=<workspace_path>/project_root_dir/:<workspace_path>/project_root_dir/subdir
我正在从
project_root_dir/subdir
启动翻译器
# from inside project_root_dir/subdir
import a.b.test_cases
它抛出模块未找到错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'a.b.test_cases'
Python 解释器将首先在
subdir.a.b
下查找该模块,但它不会找到该模块,然后在 project_root_dir.a.b
中查找应该找到的模块。 (因为这两个路径都存在于 PYTHONPATH 中)。那为什么会抛出错误呢?
有什么方法可以让它发挥作用吗?
这一定是名称冲突或阴影的问题。
尝试不同的名称,
project_root_dir/a/b
和 project_root_dir/subdir/c/d
>>> import a.b
>>> import a.b.test_cases
>>>
>>> import subdir
>>> import subdir.c
>>> import subdir.c.d
我建议通过如下修改
sys.path
来显式控制运行时的模块搜索路径
import sys
import os
# Add project root directory to the system path
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
if project_root not in sys.path:
sys.path.insert(0, project_root)
import a.b.test_cases