【问题标题】:Python ImportError / ModuleNotFoundError on own package in Eclipse PyDevEclipse PyDev 中自己的包上的 Python ImportError / ModuleNotFoundError
【发布时间】:2019-07-02 16:59:55
【问题描述】:

已解决,谢谢!

假设我有一个位于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

为什么general 不是一个包?我认为要求是“包含__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__.py - 两边各有2个下划线
  • @RobinZigmond 已经是了,只是在文本中说错了,抱歉。修好了。
  • general上方的根目录添加__init__.py
  • @YugandharChaudhari 没用,结果相同。 (此外,将答案放入答案而不是 cmets 将有助于整个赞成/反对/接受业务的运作。)
  • 是的,但只有在我们非常确定的情况下我们才应该回答:) 并且 __init__.py 对我来说是空的。告诉解释器将目录和文件视为模块

标签: python python-3.x eclipse import pydev


【解决方案1】:

当使用init 文件时,它必须像 Robin Zigmond 所说的那样带有下划线。

__init__.py

如果这对您不起作用,您可以尝试写入init 文件

 from foo import bar

 from foo.py import *

Look here

【讨论】:

  • 在一个文件中导入所有函数永远都不好。它来自 foo import bar。
  • 该文件已经命名为__init__.py(抱歉,我编辑了这个问题以适应这个问题)。它还包含__all__ 变量。必须将每个函数都导入 __init__.py 对于库来说听起来不切实际?
  • @YugandharChaudhari 同意。那么如何做得更好呢?
【解决方案2】:

找到解决方案。 总台

在 PyDev 的 Pythonpath(为整个工作区配置)中,我有另一个包,其中包含一个名为 general.py模块。解释器在到达我的 general 之前发现了这个,所以消息general is not a package 引用了同名的模块

这应该教会我在确实需要重用现有名称时使用单独的工作区。理想情况下,无论如何不要为不同的事物使用相同的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-25
    • 2018-10-10
    • 1970-01-01
    • 2011-02-11
    • 2017-05-06
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    相关资源
    最近更新 更多