[英]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
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中,我仍然遇到相同的错误。 为什么?
啊! 找到解决方案! (请参见下面的答案以关闭此操作)。
如Robin Zigmond所说,在使用init
文件时,它必须带有下划线。
__init__.py
如果这对您不起作用,则可以尝试在init
文件中编写
from foo import bar
要么
from foo.py import *
找到解决方案。 headdesk
在PyDev的Pythonpath(为整个工作区配置)中,我有另一个软件包,其中包含一个名为general.py
的模块 。 解释器在到达我的package general
之前就找到了这个消息,因此message general is not a package
指向同名模块的general is not a package
。
当我确实需要重用现有名称时,这应该教会我使用单独的工作区。 理想情况下,无论如何不要在不同的事物上使用相同的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.