Python - 库问题

6 投票
4 回答
4806 浏览
提问于 2025-04-11 09:29

我刚开始学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 个回答

3

这段话的意思是,它找不到“sr1”这个东西在scapy里。具体你是多新手我不太清楚,但解释器总是你的好帮手。你可以打开解释器(在命令行里输入“python”),然后在提示符(>>>)后输入(记得不要输入>>>,它会自动显示):

>>> import scapy
>>> from pprint import pformat
>>> pformat(dir(scapy))

最后一行会打印出很多内容。你能在里面找到“sr1”、“IP”和“ICMP”这些词吗?如果找不到,那这个例子可能有问题。

你也可以试试输入help(scapy)

在不安装scapy和查看你的实际源文件的情况下,我能帮你到这里。

4

我也遇到过同样的问题,在scapy的v2.x版本中使用

 from scapy.all import * 

而不是v1.x版本

 from scapy import *

具体可以参考这里的说明

希望你能喜欢这个 =)

6

在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 导入语句

撰写回答