【问题标题】:Importing classes in python returns cannot import name error在python中导入类返回无法导入名称错误
【发布时间】:2015-10-14 18:40:42
【问题描述】:

我从我的第一个 python 项目开始,但我从一开始就遇到了问题。我试图弄清楚如何将一个类导入到我的 main.py 文件中。

我的目录结构是……

game
- __init__.py
- main.py
- player.py

到目前为止,我在 ma​​in.py...

from player import Player

player1 = Player("Ben")
print player1.name

我收到以下错误...

Traceback(最近一次调用最后一次): 文件“main.py”,第 1 行,在 从播放器导入播放器 ImportError: 无法导入名称播放器

我有一个谷歌,但找不到任何工作。有人可以帮忙吗?

我使用的是 Python 2.7.10

更新

所以我的 player.py 包含

class Player:
    def __init__(self, name):
        self.name = name

    def name(self):
        return self.name

而我的 init.py 文件是空的

【问题讨论】:

  • 向我们展示player.py的全部内容。
  • 向我们展示 __init__.pyplayer.py 中的内容。
  • 出现错误时您在哪里调用脚本?我怀疑player.py 不在PYTHONPATH
  • 如果你打开 ipython 并尝试导入播放器会发生什么?
  • 这是您计算机上唯一的player.py 文件吗?您实际上可能正在导入没有 Player 类的旧版本的 player

标签: python import importerror


【解决方案1】:

当您执行from player 时,Python 会在 PYTHONPATH 的根目录中查找名为 player 的模块。由于不存在这样的模块,因此会引发错误。

通过使用相对导入(在模块名称前加上一个点),您可以告诉 Python 在与当前文件相同的目录中查找模块。像这样:

from .player import Player

或者,如果这让您感到困惑,您可以使用绝对路径 (game.player),如果安装正确,它应该位于 PYTHONPATH 的根目录。

from game.player import Player

但是,您不能始终保证用户始终将库安装在 PYTHONPATH 根目录下,因此在同一库中导入模块时,通常首选相对路径。请参阅docs 了解更多信息。

【讨论】:

    猜你喜欢
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 2017-08-11
    相关资源
    最近更新 更多