Eclipse PyDev 忽略 __init__,导致未解决的模块导入错误
Eclipse PyDev ignores __init__, leading to unresolved module import error
尚不清楚如何在我们的 git 存储库中正确构建我们的 PyDev projects/packages,以便绝对导入计算为 they should。这导致 Eclipse 抛出一个我不理解的 "unresolved import" 错误。
目前,回购看起来像这样:
REPO/ [repo master] # Set as source folder (PYTHONPATH)
package_A/ # Set as source folder (PYTHONPATH)
__init__.py # from foo import some_func
__main__.py # Absolute import required
foo.py # some_func()
package_B # Set as source folder (PYTHONPATH)
__init__.py
__main__.py
bar.py
__init__.py # Empty
package_A/__init__.py
看起来像这样:
from foo import some_func
现在我去 package_A/__main__.py
并想从 foo
导入 some_func()
:
from foo import some_func # works
from package_A import some_func # unresolved import error in Eclipse
# The latter case should work due to the initial import in __init__
根据this source,第二个选项应该有效。事实上,这并不意味着由于某种原因,package_A/__init__.py
的内容没有任何效果。我的错误是什么?
上述未解决的导入错误的根本原因是什么?
如果要导入 package_A
,不应将其本身设置为源文件夹。
即:只有 REPO
应标记为源文件夹(这是 PYTHONPATH 中唯一应包含的条目)。
请注意,from foo import some_func
在这种情况下将不起作用...因此,您可以编写绝对导入 from package_A.foo import some_func
或相对导入:from .foo import some_func
.
尚不清楚如何在我们的 git 存储库中正确构建我们的 PyDev projects/packages,以便绝对导入计算为 they should。这导致 Eclipse 抛出一个我不理解的 "unresolved import" 错误。
目前,回购看起来像这样:
REPO/ [repo master] # Set as source folder (PYTHONPATH)
package_A/ # Set as source folder (PYTHONPATH)
__init__.py # from foo import some_func
__main__.py # Absolute import required
foo.py # some_func()
package_B # Set as source folder (PYTHONPATH)
__init__.py
__main__.py
bar.py
__init__.py # Empty
package_A/__init__.py
看起来像这样:
from foo import some_func
现在我去 package_A/__main__.py
并想从 foo
导入 some_func()
:
from foo import some_func # works
from package_A import some_func # unresolved import error in Eclipse
# The latter case should work due to the initial import in __init__
根据this source,第二个选项应该有效。事实上,这并不意味着由于某种原因,package_A/__init__.py
的内容没有任何效果。我的错误是什么?
上述未解决的导入错误的根本原因是什么?
如果要导入 package_A
,不应将其本身设置为源文件夹。
即:只有 REPO
应标记为源文件夹(这是 PYTHONPATH 中唯一应包含的条目)。
请注意,from foo import some_func
在这种情况下将不起作用...因此,您可以编写绝对导入 from package_A.foo import some_func
或相对导入:from .foo import some_func
.