Python 子模块未被导入

Python Submodule is not getting imported

这是我在 Eclipse 中的 Pydev 项目的文件路径:

project
   |
   +----tests
   |      |
   |      +----subtests
   |      |       |
   |      |       +----__init__.py
   |      |       |
   |      |       +----test1.py
   |      |
   |      +----__init__.py
   |      |
   |      +----test2.py      
   |              
   +----mods
         |
         +----__init__.py
         |
         +----submods1
                 |
                 +----__init__.py
                 |
                 +----submods2
                         |
                         +----__init__.py
                         |
                         +----a.py
                         |
                         +----b.py
                         |
                        ...
                         |
                         +----z.py

test1和test2完全一样,所有的初始化文件都只有注释。测试是从 mods 目录和那些模块依赖项中获取模块。当我 运行 test1 时,所有的模块都找到了,但是 test2 总是无法在 submods2 中找到相同的模块(我们称之为 "z.py")。但不知何故,它能够找到其余的模块。 z.py中不是不能导入,而是根本找不到文件

测试 2:

>>> from mods.submod1.submod2 import z
    exec exp in global_vars, local_vars
  File "<console>", line 1, in <module>
ImportError: cannot import name z
>>> from mods.submod1 import submod2
>>> hasattr(submod2, 'z')
False

两次测试中 sys.path 的唯一区别是测试所在的目录,project/tests/subtests 用于测试 1,project/tests 用于测试 2。

我不明白为什么 test2 无法导入 z.py 但 test1 和 test2 可以导入其余模块。

为帮助诊断问题,请执行以下操作:

从 mods.submod1 导入 submod2 打印(submod2)

我猜这不是您期望的模块。

您使用的 Python 版本是什么?

我想我找到了解决办法。在我的 test2 的 Run Configurations 中,Arguments 选项卡中的 Working directory 有一个自定义路径 ${workspace_loc:project/tests/},我将它切换到默认路径 ${project_loc:/selected project name},这似乎正在解决这个问题。虽然我不明白这是如何解决问题的,但结果对我来说已经足够好了。