我的项目具有由 pydev 项目向导创建的根 src 文件夹。 Src 文件夹在项目的 python 路径中。在该文件夹下,我有一个包含两个文件的包(包含 __init__.py
的文件夹):a.py
和 b.py
。 b.py
正在尝试从 a.py
导入,但我收到未解析导入的错误。
我能够通过将该子文件夹作为附加 src 文件夹显式添加到项目的 python 路径来“修复”错误。现在我在 pythonpath 中有两个文件夹作为 src 文件夹。我不明白的是,为什么 pydev 无法解析导入,因为我正在谈论的包/文件夹直接位于 python 路径中的根 src 文件夹下面。根 src 文件夹中没有 python 文件。
如果我将 __init__.py
添加到根 src 文件夹,问题仍然存在。我只需将子文件夹添加到 pythonpath 即可消除错误。
我做错了什么吗?这似乎不对。
编辑: 我错了。我的导入语法不正确。我应该这样做:从 package.module import someting 而不是从 module import something
最佳答案
很难从您的描述中分辨出来,实际代码会有所帮助,但我怀疑您正在寻找的是相对导入。
如果你有一个文件 pkg/a.py
就是这样做的:
import b
这将在您的 sys.path
某处查找名为 b.py
的顶级模块。
但是如果你这样做:
from . import b
然后它将在(并且仅)pkg
中查找名为b.py
的文件。
或者,您可以使用绝对导入,就像在包外的模块中一样,例如以下之一:
import pkg.b
from pkg import b
您尝试将 pkg
添加到 sys.path
的解决方法是一个非常糟糕的主意,原因有很多。例如,就 Python 而言,b
和 pkg.b
将成为不同的模块,因此顶层代码最终可能会运行两次,您最终可能会具有所有全局变量的两个单独副本(即使您认为“我没有使用全局变量”,您也可能认为类和函数是全局变量,并且您很容易遇到这样的情况 b.MyClass (3) != pkg.b.MyClass(3)
出乎意料,调试起来总是很有趣……)等
将 __init__.py
添加到 src
也是一个坏主意。这会将 src
变成一个包,这意味着 b
的正确限定名称现在是 src.pkg.b
,而不是 pkg。 b
,但是无法以正确的名称导入它(除非 src
的父目录恰好位于 sys.path
以及 src
... 在这种情况下,您会遇到与上一段完全相同的问题。
关于python - pydev - 如何避免将子目录添加到 python 路径以修复 Unresolved 导入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18521503/