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&lt;any-version&gt;/site-packages/ 中安装包,因为您用来运行包含使用 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 解释器,而不是您的系统。

另外,你可以查看这个虚拟环境的库,./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:没有名为枚举的模块

ImportError:没有名为“appdirs”的模块

ImportError:没有名为 websocket 的模块

ImportError:没有名为“backports”的模块

ImportError:没有名为 ghostscript 的模块

ImportError:运行火花时没有名为请求的模块