Python Eclipse PyDev 中自己的包的 ImportError / ModuleNotFoundError
Python ImportError / ModuleNotFoundError on own package in Eclipse PyDev
已解决,谢谢!
假设我在 C:\mymodules\general
下有一个自己编写的模块,其中包含文件 foo.py
和 __init__.py
.
现在我想将位于 foo.py
内的函数 bar()
导入到一个完全不同位置的脚本中。
为什么这不起作用?
import sys
sys.path.append(r"C:\mymodules")
from general import foo
foo.bar()
我得到ImportError: cannot import name 'foo'
如果我将 C:\mymodules\general
添加到路径,则相同。
或者,我也试过
import sys
sys.path.append(r"C:\mymodules")
import general.foo
foo.bar()
在这里,我得到 ModuleNotFoundError: No module named 'general.foo'; 'general' is not a package
。
为什么一般不会是包?我认为要求是 "contains an __init__.py
"(当然还有我要导入的模块)?
这就是全部Python3,在Windows7下使用Eclipse中的PyDev。
谁能告诉我哪里出了问题以及如何解决?
编辑: 文件确实已经被调用 __init__.py
,所以这不是问题所在。
__init__.py
已经包含行
__all__ = ["foo"]
编辑 2: 奇怪的是,以下作品:
import sys
sys.path.append(r"C:\mymodules")
from general import *
bar()
不过我真的不想 import *
。一定有更清洁的方法吗?
编辑 3: 当我从 IDLE 中 运行 它时,它起作用了! (即第一个代码。)但是在 Eclipse PyDev 中,我仍然遇到相同的错误。为什么?
啊!找到解决方案! (请参阅下面的答案,以关闭它)。
当使用 init
文件时,它必须像 Robin Zigmond 所说的那样带有下划线。
__init__.py
如果这对您不起作用,您可以尝试在 init
文件中写入
from foo import bar
或
from foo.py import *
已找到解决方案。 总台
在 PyDev 的 Pythonpath(为整个工作区配置)中,我有另一个包含名为 general.py
的 模块 的包。解释器在到达我的 package general
之前发现了这个,所以消息 general is not a package
引用了 module同名。
这应该教会我在确实需要重用现有名称时使用单独的工作区。理想情况下,无论如何不要对不同的事物使用相同的名称。
已解决,谢谢!
假设我在 C:\mymodules\general
下有一个自己编写的模块,其中包含文件 foo.py
和 __init__.py
.
现在我想将位于 foo.py
内的函数 bar()
导入到一个完全不同位置的脚本中。
为什么这不起作用?
import sys
sys.path.append(r"C:\mymodules")
from general import foo
foo.bar()
我得到ImportError: cannot import name 'foo'
如果我将 C:\mymodules\general
添加到路径,则相同。
或者,我也试过
import sys
sys.path.append(r"C:\mymodules")
import general.foo
foo.bar()
在这里,我得到 ModuleNotFoundError: No module named 'general.foo'; 'general' is not a package
。
为什么一般不会是包?我认为要求是 "contains an __init__.py
"(当然还有我要导入的模块)?
这就是全部Python3,在Windows7下使用Eclipse中的PyDev。
谁能告诉我哪里出了问题以及如何解决?
编辑: 文件确实已经被调用 __init__.py
,所以这不是问题所在。
__init__.py
已经包含行
__all__ = ["foo"]
编辑 2: 奇怪的是,以下作品:
import sys
sys.path.append(r"C:\mymodules")
from general import *
bar()
不过我真的不想 import *
。一定有更清洁的方法吗?
编辑 3: 当我从 IDLE 中 运行 它时,它起作用了! (即第一个代码。)但是在 Eclipse PyDev 中,我仍然遇到相同的错误。为什么?
啊!找到解决方案! (请参阅下面的答案,以关闭它)。
当使用 init
文件时,它必须像 Robin Zigmond 所说的那样带有下划线。
__init__.py
如果这对您不起作用,您可以尝试在 init
文件中写入
from foo import bar
或
from foo.py import *
已找到解决方案。 总台
在 PyDev 的 Pythonpath(为整个工作区配置)中,我有另一个包含名为 general.py
的 模块 的包。解释器在到达我的 package general
之前发现了这个,所以消息 general is not a package
引用了 module同名。
这应该教会我在确实需要重用现有名称时使用单独的工作区。理想情况下,无论如何不要对不同的事物使用相同的名称。