Python - 库问题
我刚开始学Python,正在用Scapy这个网络处理工具编程,但遇到了一些问题。我不太确定这些问题是出在Scapy上,还是因为我还是个Python新手。在Scapy的网站上,他们提供了一个示例程序,但我在自己电脑上运行不了:
#! /usr/bin/env python
import sys
from scapy import sr1,IP,ICMP
p=sr1(IP(dst=sys.argv[1])/ICMP())
if p:
p.show()
运行后我得到了:
Traceback (most recent call last):
File "test.py", line 4, in <module>
from scapy import sr1,IP,ICMP
ImportError: cannot import name sr1
所以我想问的是:在安装Python库的时候,我需要修改我的路径或者其他什么设置吗?还有,有没有什么方法可以在解释器里查看Scapy包的内容?我可以顺利运行from scapy import *
,但因为我不知道里面有什么,使用起来就很困难。
4 个回答
这段话的意思是,它找不到“sr1”这个东西在scapy里。具体你是多新手我不太清楚,但解释器总是你的好帮手。你可以打开解释器(在命令行里输入“python”),然后在提示符(>>>)后输入(记得不要输入>>>,它会自动显示):
>>> import scapy
>>> from pprint import pformat
>>> pformat(dir(scapy))
最后一行会打印出很多内容。你能在里面找到“sr1”、“IP”和“ICMP”这些词吗?如果找不到,那这个例子可能有问题。
你也可以试试输入help(scapy)
在不安装scapy和查看你的实际源文件的情况下,我能帮你到这里。
我也遇到过同样的问题,在scapy的v2.x版本中使用
from scapy.all import *
而不是v1.x版本
from scapy import *
具体可以参考这里的说明
希望你能喜欢这个 =)
在Federico Ramponi的提醒下,“你应该把scapy当作一个独立的解释器来使用,而不是作为一个库”,我想回答这个问题中与scapy无关的部分。
问:安装Python库的时候,我需要更改我的路径或者类似的东西吗?
答:我想你是在说要不要全局更改PYTHONPATH
。通常来说,这样做是不必要的,也不是个好主意。
第三方的Python库应该安装在系统目录里,比如/usr/lib/python2.5/site-packages
,或者你可以选择本地安装,这种情况下你可能需要在你的Makefile或者驱动脚本中设置PYTHONPATH
。
问:有没有什么可以在解释器中运行的命令,告诉我scapy包的内容?
答:你可以这样做:
>>> import scapy
>>> dir(scapy)
或者更好的是:
>>> import scapy
>>> help(scapy)
评论中提到的额外问题。
问:‘import scapy’和‘from scapy import *’是一样的吗?
答:import scapy
会把scapy这个名字绑定到本地的命名空间中,指向scapy模块对象。而from scapy import *
则不会绑定模块名,而是把scapy模块中所有公开的名字都绑定到本地命名空间中。
可以参考Python参考手册的第6和第7段,6.12 导入语句。