导入错误:没有名为 scapy.all 的模块

问题描述 投票:0回答:7

我正在运行 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

我尝试过谷歌搜索,并安装了

pcapy
和其他软件包 - 但没有运气。

python macos scapy
7个回答
21
投票

如果您使用的是 ubuntu,请输入:'sudo apt-get install python3-scapy' for python version >= 3.


10
投票
当 Python 找不到您的模块时,会发生

ImportError: No module..
发现错误。那么,它在哪里寻找模块呢?

import os
print os.sys.path

验证

/usr/local/lib/python2.7/site-packages
是否在该列表中。如果没有的话请追加

os.sys.path.append('/usr/local/lib/python2.7/site-packages')
并尝试加载它。如果仍然不起作用,请尝试重新安装模块,因为那里似乎存在问题。


4
投票
  1. 识别 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']
    >>>
    $
    
    1. 确定 scapy 在您盒子上的位置
    $ which scapy
    /usr/bin/scapy
    $
    
    1. 您将不再遇到导入错误
    $ 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 *
    

3
投票

这里的大多数答案都在帮助您在系统级别安装 scapy 并使用 sudo 访问权限运行。使用

sys.path
他们试图将路径添加到已安装的 scapy 位置,基本上,在
lib/python<any-version>/site-packages/
中 pip install 软件包,因为您用来运行包含使用 scapy python 软件包的程序的 python 解释器没有 scapy在
site-packages
这就是为什么口译员要提高
ImportError: No module named scapy.all

我建议使用虚拟环境管理器创建一个单独的虚拟环境,选择您选择的 python 版本,可以是 2.7 或 3.8 或其他版本,然后在虚拟环境中为您的项目安装和使用 scapy python 包。这将使您的系统保持干净,并且问题很容易调试,您可以稍后删除这个虚拟环境,并且不会留下项目依赖项的痕迹。

使用非常简单:

假设你已经安装了

virtualenv
(像conda这样的外部包),如果没有你可以安装

  • 如果在Python(版本2.x)上:
    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 解释器,而不是系统的 python 解释器。

此外,你还可以查看这个虚拟环境的库,

./packet_sniffer_env38/lib/python3.8/site-packages
,你会在这里找到
scapy

sudo ./packet_sniffer_env38/bin/python <your_program_using_scapy>.py

您可以通过 virtualenv 来查看 scapy python 包的工作使用


2
投票

如果你正在使用 termux 也许你应该尝试这个:

pip2 install scapy.

0
投票

如果你安装了scapy,你可以使用如下代码。您不需要将其包装在 try 块中(显然),但这对我今天有用。

try:
   from scapy.all import rdpcap, IP, Ether, PacketList
except ImportError:
   raise ImportError('scapy is not installed, please install it by running: '
          'pip install scapy') from None

现在你想做点什么吗?

plist = rdc.ap(sys.argv[1])
for data in plist:
    if isinstance(data, Ether):
        print("Found an ether object, might be what I want")

0
投票

只需使用

apt
安装模块:

sudo apt update
sudo apt upgrade
sudo apt install python3-scapy
© www.soinside.com 2019 - 2024. All rights reserved.