能够导入模块但不能从中导入东西[关闭]

Posted

技术标签:

【中文标题】能够导入模块但不能从中导入东西[关闭]【英文标题】:able to import module but not things from it [closed] 【发布时间】:2021-12-04 22:52:44 【问题描述】:

我在 mac(第一次)并使用 pycharm 和可视化代码。

在pycharm上,我使用的是venv,已经安装了scapy,可以看到它安装在解释器包管理器中,“import scapy”下没有红线。当我尝试从该包“从 scapy 导入 UDP”中导入任何内容或使用 scapy“scapy.UDP”中的任何内容时,就会出现问题。 ----如下所示的各个错误。

ImportError: cannot import name 'UDP' from 'scapy' (/Users/KEVIN/PycharmProjects/UDP/venv/lib/python3.9/site-packages/scapy/__init__.py)

AttributeError: module 'scapy' has no attribute 'UDP'

另一方面,我尝试使用可视代码和系统 python,代码运行没有问题,但我无法右键单击 UDP() 并跳转到它说未找到定义的类定义?我觉得这一定是与 mac 相关的问题,但我似乎无法弄清楚。

【问题讨论】:

【参考方案1】:

UDP不是scapy直接下的,需要做的

from scapy.layers.inet import UDP

然后您可以右键单击 UDP() 并跳转到类定义。

以下两次导入也对我有用:

venv$ python
Python 3.8.10 (default, Sep 28 2021, 16:10:42) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from scapy.ansmachine import AnsweringMachine
>>> from scapy.all import UDP
>>>

请仔细检查你的 scapy 安装。

【讨论】:

谢谢@Philippe!我花了很多时间做一些如此微不足道的事情。这解决了两个 IDE 中的所有问题。但是你能解释一下为什么“from scapy.all import UDP”不起作用吗? 这个答案只工作过一次,再次运行它会产生错误:ImportError: cannot import name 'AnsweringMachine' from partial initialized module 'scapy.ansmachine'(很可能是由于循环导入)【参考方案2】:

尝试: from scapy.all import * 来自https://scapy.readthedocs.io/en/latest/functions.html

这行得通吗?

【讨论】:

所以会在pycharm venv中运行,但是还是看不到函数UDP()。通常我可以点击 UDP() 来查看构造函数,但是我看到“在'imported module scapy | import module scapy | init.py'中找不到引用'UDP'” 如果我执行“从 scapy.all 导入 UDP”,它仍然运行,但它在 UDP 下显示红线,当悬停在上方时显示,“在 'all.py' 中找不到参考 'UDP'”

以上是关于能够导入模块但不能从中导入东西[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

ipython notebook 可以导入 pyd 模块,但 python 解释器不能

为啥 CPython 3.4.3 不能导入“_socket”模块?

python不会让我导入模块

Mocha + TypeScript:不能在模块外使用导入语句

导入模块但仍需使用全名

为啥我不能在 Anaconda 之外导入 Python 模块?