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

Python错误:ImportError:无法导入名称Akismet,python,environment-variables,python-import,Python,Environment Variables,Python Import,我见过许多类似的错误,但我看不到适用于我的特定问题的解决方案 我试图使用PYTHONPATH上的,如果我启动交互式解释器,当我从akismet import-akismet运行(如docstring所述)时,我会得到以下错误: from akismet import Akismet Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: cannot imp

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

我试图使用PYTHONPATH上的,如果我启动交互式解释器,当我从akismet import-akismet运行
(如docstring所述)时,我会得到以下错误:

from akismet import Akismet
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name Akismet
从akismet导入akismet
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ImportError:无法导入名称Akismet

如果您的PYTHONPATH设置正确且全局性好(只是我自己测试过),那么它将完美工作

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

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

当你写作时:

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


所有这一切都假设
Akismet
是一个文件,
Akismet
是一个目录。如果存在
akismet.py
文件,则包含此文件的目录应列在
$PYTHONPATH
中,检查PYTHONPATH是否与您期望的一样,例如,在交互式控制台中执行此操作:

In [1]: import sys

In [2]: print sys.path

akismet.py真的在这些文件夹中吗?

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

您正试图从一个名为say'strategy.py'的模块导入函数/类X

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

root folder\
    strategy.py (contains function/class called X)
    strategy\
        __init__.py
然后,您忘记了您已经创建了python包目录的事实,并尝试在“root”目录中导入文件
strategy.py
中定义的一些类或函数,如下所示

来自策略导入X

然后得到的是
Python错误:ImportError:cannotimportnamex
错误

正如Doppelganger所指出的,实际问题是python解释器优先于您创建的包目录,并在包目录中搜索名为X的文件/模块,而忽略您实际查找的实际模块
strategy.py
,以及其中的函数/类X

如果您阅读python软件包的文档,这正是您所期望和想要的,但是如果您像我一样中途改变主意,您可能会抓狂。

简单:

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

  • 现在运行您的应用程序,您应该可以开始了。

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


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

    假设我在PYTHONPATH上有/path/,然后我尝试了/path/akismet/akismet.py(添加init.py),也尝试了/path/akismet.pyworked@Doppelganger:将“akismet.py”脚本放入“/path/”并将该路径添加到PYTHONPATH。如果PYTHONPATH中有多个目录,请确保使用冒号作为分隔符。重新启动并使用
    set
    命令检查PYTHONPATH是否正确。然后它肯定会工作。好的,这里真正的问题是我已经将akismet文件夹标记为一个包添加到init.py中,我删除了该文件夹,现在它工作正常。回答不错,只是建议人们重新启动以应用环境变量更改。当然,重新启动应用程序,但不需要重新启动操作系统内核和固件。假设我在PYTHONPATH上有/path/,然后我尝试了/path/akismet/akismet.py(添加init.py),并尝试了/path/akismet.py。这两种方法都不起作用。另外,还需要检查是否存在延迟的*.pyc文件,因为即使*.py文件不存在,python也会导入这些文件。pyc是我生存的祸根!