导入错误:没有名为...的模块 [请提供完整解决方案]
我在Linux Backtrack5上用Eclipse IDE写Python程序。
在Backtrack中可以使用Scapy和Python 2.6。我发现所有模块都有自动补全的功能,但当我运行程序时,出现了以下错误:
from scapy.contrib.ospf import OSPF_Hdr
ImportError : No module named contrib.ospf
我刚开始学习Python编程,遇到这个问题的资料很多。
对我来说,这个问题很有趣,编码的时候一切都正常,但程序就是不运行!
除了想解决这个问题,我还想知道为什么会出现这个问题?一般来说该怎么修复呢?
也许我的问题是重复的,但我们需要一个完整的解决方案,这样的话就不会和其他人问的问题重复了。
2 个回答
你在使用的IDE(集成开发环境)里的PYTHONPATH和你运行程序时用的PYTHONPATH是不一样的。
你的搜索路径设置错了。
常见的两个原因是:
- 开发和运行时使用的Python版本不同。你确定你在两个地方都用的是python2.6吗?因为并不是所有的包在所有版本的Python中都有。
还有就是你在IDE里的搜索路径和在命令行里的搜索路径不一样。我对Eclipse没有经验,但在其他IDE中我遇到过这种情况。
在bash中,你可以这样写:
export PYTHONPATH="$PYTHONPATH:/where/module/lives/"
这样就可以把路径加进去。
如何把这个加到你的bash配置文件里:
http://blog.streamitive.com/2011/12/01/export-pythonpathpythonpath/
你也可以通过Python本身来加路径:
http://www.johnny-lin.com/cdat_tips/tips_pylang/path.html
什么时候通过bash加路径,什么时候通过Python加路径:
如果你确定你的模块会一直在同一个地方,就用Python来加路径,这样更可控。
否则,你应该明确设置路径。可以在启动的shell脚本里,或者在定时任务中,或者在你调用Python程序的任何地方。