具有类似目录结构的python导入问题

问题描述 投票:0回答:2

我有以下目录结构:

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 中)。那为什么会抛出错误呢?

有什么方法可以让它发挥作用吗?

python python-3.x import
2个回答
0
投票

这一定是名称冲突或阴影的问题。

尝试不同的名称,

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

0
投票

我建议通过如下修改

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
© www.soinside.com 2019 - 2024. All rights reserved.