已解决,谢谢!
假设我有一个自己编写的模块,C:\mymodules\general其中包含文件foo.py和__init__.py.
现在我想将bar()位于里面的函数导入foo.py到一个完全不同的地方的脚本中。
为什么这不起作用?
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。
为什么一般不会是一个包?我认为要求是“包含一个__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 中,我仍然遇到相同的错误。为什么?
啊! 找到解决方案!(请参阅下面的答案,以关闭它)。
相关分类