ImportError:没有名为 scapy.all 的模块
Posted
技术标签:
【中文标题】ImportError:没有名为 scapy.all 的模块【英文标题】:ImportError: No module named scapy.all 【发布时间】:2018-03-18 02:11:36 【问题描述】:我正在运行 macOS Sierra 和 Python 2.7。
在我的终端中,我安装了 scapy:
pip install scapy
Requirement already satisfied: scapy in /usr/local/lib/python2.7/site-packages
但是运行这个:
from scapy.all import *
for pkt in sniff(iface='en0'):
print pkt
给我这个:
python test.py
Traceback (most recent call last):
File "test.py", line 1, in <module>
from scapy.all import *
ImportError: No module named scapy.all
我已经尝试过 Google 并安装了 pcapy
和其他软件包 - 但没有运气。
【问题讨论】:
您是否尝试过import scapy
看看是否可行?
是的,同样...
使用import os; os.sys.path
检查您的查找路径并验证/usr/local/lib/python2.7/site-packages
是否在该列表中。
【参考方案1】:
这里的大多数答案都是帮助您在系统级别安装 scapy 并使用 sudo 访问权限运行。使用sys.path
,他们试图将路径添加到已安装的 scapy 位置,基本上,在lib/python<any-version>/site-packages/
中安装包,因为您用来运行包含使用 scapy python 包的程序的 python 解释器没有 scapy在site-packages
这就是解释器提高ImportError: No module named scapy.all
的原因!
我建议使用虚拟环境管理器创建一个您选择的 Python 版本的单独虚拟环境,可以是 2.7 或 3.8 或其他版本,然后在您的虚拟环境中为您的项目安装和使用 scapy python 包。这将使您保持系统清洁并且问题很容易调试,您可以稍后删除此虚拟环境,并且不会留下项目依赖项的痕迹。
使用非常简单:
假设你已经安装了virtualenv
(像 conda 这样的外部包),如果没有你可以安装
pip install virtualenv
如果在 python(版本 3.x)上:python3 -m pip install virtualenv
那么,
创建一个虚拟环境,你可以命名任何东西!
virtualenv --python=3.8 packet_sniffer_env38
激活虚拟环境
source packet_sniffer_env38/bin/activate
在你的情况下,只需安装你的依赖项scapy
pip install scapy
现在您可以使用 scapy 运行程序,注意您仍然需要使用 sudo 访问权限,但这次您将使用虚拟环境的 Python 解释器,而不是您的系统。
另外,你可以查看这个虚拟环境的库,./packet_sniffer_env38/lib/python3.8/site-packages
,你会在这里找到scapy
!
sudo ./packet_sniffer_env38/bin/python <your_program_using_scapy>.py
you can have a look at the working use of scapy python package with virtualenv!
【讨论】:
【参考方案2】:如果您使用的是 ubuntu,请键入:'sudo apt-get install python3-scapy' for python version >= 3。
【讨论】:
这是为我个人解决问题的唯一方法。【参考方案3】:如果你使用的是 termux,也许你应该试试这个:
pip2 install scapy.
【讨论】:
【参考方案4】:确定 Python 从中导入其库的位置
$ python
Python 2.7.15+ (default, Aug 31 2018, 11:56:52)
[GCC 8.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> print os.sys.path
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/python2.7/dist-packages/wx-3.0-gtk3']
>>>
$
-
确定盒子上 scapy 的位置
$ which scapy
/usr/bin/scapy
$
-
您将不再收到导入错误
$ python
Python 2.7.15+ (default, Aug 31 2018, 11:56:52)
[GCC 8.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.sys.path.append('/usr/bin/')
>>> from scapy.all import *
【讨论】:
【参考方案5】:ImportError: No module..
found 错误发生在 Python 找不到您的模块时。那么,它在哪里寻找模块呢?
import os
print os.sys.path
验证/usr/local/lib/python2.7/site-packages
是否在该列表中。如果没有,追加它
os.sys.path.append('/usr/local/lib/python2.7/site-packages')
并尝试加载它。如果这仍然不起作用,请尝试重新安装该模块,因为那里似乎存在问题。
【讨论】:
这不适用于莫哈韦沙漠。 /usr/local/lib/python2.7/site-packages 中没有 scapy 你需要弄清楚pip安装scapy的位置,并添加这个目录。以上是关于ImportError:没有名为 scapy.all 的模块的主要内容,如果未能解决你的问题,请参考以下文章
ImportError:没有名为 websocket 的模块
ImportError:没有名为“backports”的模块