导入错误:没有名为...的模块 [请提供完整解决方案]

-2 投票
2 回答
1228 浏览
提问于 2025-04-17 15:06

我在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 个回答

1

你在使用的IDE(集成开发环境)里的PYTHONPATH和你运行程序时用的PYTHONPATH是不一样的。

2

你的搜索路径设置错了。

常见的两个原因是:

  • 开发和运行时使用的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程序的任何地方。

撰写回答