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}
,这似乎正在解决这个问题。虽然我不明白这是如何解决问题的,但结果对我来说已经足够好了。
这是我在 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}
,这似乎正在解决这个问题。虽然我不明白这是如何解决问题的,但结果对我来说已经足够好了。