Python错误:ImportError:无法导入名称Akismet
我见过许多类似的错误,但我看不到适用于我的特定问题的解决方案 我试图使用PYTHONPATH上的,如果我启动交互式解释器,当我从akismet import-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
(如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是我生存的祸根!