【问题标题】:Python error: ImportError: cannot import name AkismetPython 错误:ImportError: cannot import name Akismet
【发布时间】:2011-01-22 01:19:55
【问题描述】:

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

我正在尝试使用我的 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

【问题讨论】:

    标签: python environment-variables python-import


    【解决方案1】:

    如果您的 PYTHONPATH 设置正确且全局设置(刚刚自己测试过),它将完美运行。

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

    【讨论】:

    • 假设我的 PYTHONPATH 上有 /path/,然后我尝试使用 /path/akismet/akismet.py(添加 init.py),并尝试使用 /path /akismet.py 都不起作用
    • @Doppelganger:将“akismet.py”脚本放入“/path/”并将该路径添加到您的 PYTHONPATH。如果 PYTHONPATH 中有多个目录,请确保使用冒号作为分隔符。重新启动并使用set 命令检查 PYTHONPATH 是否正确。那么它肯定会起作用。
    • 好的,这里真正的问题是我已将 akismet 文件夹标记为添加到 init.py 中的包,我删除了该文件夹,现在它可以正常工作了。
    • 很好的答案,除了建议人们重新启动以应用环境变量更改。重新启动应用程序,当然,但不需要重新启动操作系统内核和固件。
    【解决方案2】:

    您的路径中应该有包含“akismet”目录的目录。我猜,您已将“akismet”目录本身添加到 $PYTHONPATH。

    当你写作时:

    from akismet import Akismet
    

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

    所有这一切都假设Akismet 是一个文件,akismet 是一个目录。如果有akismet.py文件,那么包含该文件的目录应该列在$PYTHONPATH中。

    【讨论】:

    • 假设我的 PYTHONPATH 上有 /path/,然后我尝试使用 /path/akismet/akismet.py(添加 init.py),并尝试使用 /path /akismet.py 都不起作用
    【解决方案3】:

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

    In [1]: import sys
    
    In [2]: print sys.path
    

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

    【讨论】:

      【解决方案4】:

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

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

      不幸的是,您还创建了一个名为 strategy 的 python 包目录,换句话说,您有一个名为“strategy”的目录,在“strategy”目录中至少有一个名为“____init___.py”的文件。

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

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

      from strategy import X

      然后你得到的是Python error: ImportError: cannot import name X 错误。

      正如 Doppelganger 所指出的,实际问题是 python 解释器优先考虑您创建的包目录,并在包目录中搜索名为 X 的 FILE/MODULE,并忽略实际模块 strategy.py , 以及您实际正在寻找的函数/类 X。

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

      【讨论】:

      • 还要检查逗留的 *.pyc 文件,因为即使 *.py 文件消失了,python 也会导入这些文件。 pyc 是我存在的祸根!
      【解决方案5】:

      简单:

      1. 确保您已安装 akismet(系统范围或 virtualenv)
      2. 通过粘贴(导入 akismet)到 python shell 进行验证
      3. CD 进入项目的根目录并运行 (find .-name akismet.py)
      4. 如果您找到具有该名称的文件,请查看是否可以重命名它
      5. 然后运行(find .-name akismet.pyc -print0 | xargs -0 rm -rf)

      现在运行您的应用程序,您应该一切顺利。

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-13
          • 1970-01-01
          • 2020-07-07
          • 2013-02-25
          相关资源
          最近更新 更多