Python错误:ImportError:无法导入名称Akismet

时间:2010-02-28 17:46:20

标签: python environment-variables python-import

我看过很多类似的错误,但我看不到适用于我特定问题的解决方案。

我正在尝试使用我的PYTHONPATH上的Akismet module,然后如果我启动交互式解释器,当我运行from akismet import Akismet时(如文档字符串所示),我收到以下错误:

from akismet import Akismet
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name Akismet

6 个答案:

答案 0 :(得分:15)

我只是想更多地关注Doppelganger自己对他的问题的回答。我有这个错误,情况如下:

您正尝试从名为'strategy.py'的模块中导入函数/类X.

不幸的是,你还创建了一个名为strategy的python包目录,换句话说,你有一个名为'strategy'的目录,目录'strategy'中至少有一个名为'____ init ___。py'的文件。

root folder\
    strategy.py (contains function/class called X)
    strategy\
        __init__.py

然后你忘记了你已经创建了python包目录,并尝试导入'root'目录中文件strategy.py中定义的一些类或函数,就像这样

from strategy import X

您得到的是Python error: ImportError: cannot import name X错误。

正如Doppelganger所说,实际问题是python解释器优先于您创建的包目录,并在包目录中搜索名为X的FILE / MODULE,并忽略实际模块{{1其中你正在寻找的函数/类X.

如果您阅读有关python包的文档,这正是您所期望和想要的,但如果您像我一样改变主意,那么您可能最终会摸不着头脑。

答案 1 :(得分:6)

如果您的PYTHONPATH设置正确且全局(仅我自己测试),它将完美地工作。

  • 必须设置为包含“akismet.py”的目录,而不是文件路径!确保不使用相对路径。
  • 请注意,您可能需要重新启动/注销才能将环境变量更改应用于所有程序。

答案 2 :(得分:4)

检查您的PYTHONPATH是否真的符合您的预期,例如:通过在交互式控制台中执行此操作:

In [1]: import sys

In [2]: print sys.path

是akismet.py真的在其中一个文件夹中吗?

答案 3 :(得分:2)

您的路径中应该包含“akismet”目录。我想,你已经将'akismet'目录添加到了$ PYTHONPATH。

当你写:

from akismet import Akismet

Python尝试在其搜索路径中的某处打开文件akismet/Akismet.py

所有这一切假设Akismet是一个文件而akismet是一个目录。如果存在akismet.py文件,则应在$PYTHONPATH中列出包含此文件的目录。

答案 4 :(得分:1)

简单:

  1. 确保已安装akismet(系统级或virtualenv)
  2. 通过粘贴(导入akismet)验证到python shell
  3. 将CD放入项目的根目录并运行(查找。-name akismet.py
  4. 如果找到具有该名称的文件,请查看是否可以重命名
  5. 然后运行(查找。-name akismet.pyc -print0 | xargs -0 rm -rf
  6. 现在运行你的应用程序,你应该很高兴。

答案 5 :(得分:0)

我总是忘记在ipython解释器中使用run命令时, ipython 会导入模块。它不会重新导入您更改的任何模块,因此将找不到任何新的变量或函数。这是带有ipython的known issue

结论:避免使用run,因为它不会重新加载您的模块。