我看过很多类似的错误,但我看不到适用于我特定问题的解决方案。
我正在尝试使用我的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
答案 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设置正确且全局(仅我自己测试),它将完美地工作。
答案 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)
简单:
现在运行你的应用程序,你应该很高兴。
答案 5 :(得分:0)
我总是忘记在ipython解释器中使用run
命令时, ipython 会导入模块。它不会重新导入您更改的任何模块,因此将找不到任何新的变量或函数。这是带有ipython的known issue。
结论:避免使用run
,因为它不会重新加载您的模块。