python - pydev - 如何避免将子目录添加到 python 路径以修复 Unresolved 导入问题

标签 python pydev

我的项目具有由 pydev 项目向导创建的根 src 文件夹。 Src 文件夹在项目的 python 路径中。在该文件夹下,我有一个包含两个文件的包(包含 __init__.py 的文件夹):a.pyb.pyb.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 而言,bpkg.b 将成为不同的模块,因此顶层代码最终可能会运行两次,您最终可能会具有所有全局变量的两个单独副本(即使您认为“我没有使用全局变量”,您也可能认为类和函数是全局变量,并且您很容易遇到这样的情况 b.MyClass (3) != pkg.b.MyClass(3) 出乎意料,调试起来总是很有趣……)等

__init__.py 添加到 src 也是一个坏主意。这会将 src 变成一个包,这意味着 b 的正确限定名称现在是 src.pkg.b,而不是 pkg。 b,但是无法以正确的名称导入它(除非 src 的父目录恰好位于 sys.path 以及 src... 在这种情况下,您会遇到与上一段完全相同的问题。


参见 PEP 328有关更多详细信息,以及关于 Packages 的教程部分以获得更简单的概述。

关于python - pydev - 如何避免将子目录添加到 python 路径以修复 Unresolved 导入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18521503/

相关文章:

python - 需要将 python 变量传递给 bash avconv 命令

python - 如何让蛇超出屏幕后,它会回到屏幕的另一边

python - eclipse pydev - 如何安装 python 模块

python - 事件编辑器的 pydev 控制台路径

python - Discord.py 不允许通过 `` ` 的代码块

python - 运行不可重入临界区的继承方法

python - 查找数字的算法

python - PyDev 和 pygame : Undefined Variable From Import Errors

python - zope.depectation : solve import issues with pydev, .pth 文件和站点包

python - 使用 PyDev 创建远​​程项目