繁体   English   中英

Eclipse PyDev中自己的软件包上的Python 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 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM