关于环境变量:Python错误:ImportError:无法导入名称Akismet

Python error: ImportError: cannot import name Akismet

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

我正在尝试使用PYTHONPATH上的Akismet模块,然后如果我启动交互式解释器,则在运行from akismet import Akismet(如文档字符串所述)时,出现以下错误:

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

我只是想引起更多注意Doppelganger对他的问题的回答。我遇到此错误,情况是这样的:

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

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

1
2
3
4
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,而忽略了实际的模块,然后在其中实际找到您要查找的函数/类X。

如果您阅读python软件包上的文档,这正是您所期望和想要的,但是如果您像我一样半途而废,您可能最终会挠头。


如果正确且全局设置了PYTHONPATH(我自己对其进行了测试),它将可以完美地工作。

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


检查您的PYTHONPATH是否确实如您期望的那样,例如通过在交互式控制台中执行此操作:

1
2
3
In [1]: import sys

In [2]: print sys.path

akismet.py确实在这些文件夹之一中吗?


您的路径中应该具有包含\\'akismet \\'目录的目录。我想,您已经将\\'akismet \\'目录本身添加到$ PYTHONPATH中。

写时:

1
from akismet import Akismet

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

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


简单:

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


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

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