仅在导入特定功能时循环导入错误

Circular import error only when importing specific function

我正在使用 scapy 2.4.5 并尝试使用 UDP class。

from scapy.all import UDP

运行没有问题,但是我不能用IDE去申报。如果我点击它显示没有找到声明。但是,如果我使用

from scapy.layers.inet import UDP

然后我可以转到声明并查看 class 和相关代码。但是当我 运行 它时,我收到以下错误。

ImportError: cannot import name 'AnsweringMachine' from partially initialized module 'scapy.ansmachine' (most likely due to a circular import) 

没有其他导入,这是非常基本的

from scapy.layers.inet import UDP


if __name__ == "__main__":
    
    new_udp_packet = UDP()
    print(new_udp_packet)

预期输出

WARNING: No IPv4 address found on en5 !
WARNING: No IPv4 address found on ap1 !
WARNING: more No IPv4 address found on awdl0 !
WARNING: Calling str(pkt) on Python 3 makes no sense!
b'\x005\x005\x00\x08\x00\x00'

简单的解决方法:

import scapy.all  # makes sure everything gets imported in the right order
from scapy.layers.inet import UDP

当然,您随后必须确保 scapy.all 导入在文件中保持在最前面。

但是,我建议研究一个 IDE,它可以通过 scapy.all 文件解析导入...:)

由于 scapy.layers.all(这是 scapy.all 导入的内容)通过 scapy.conf.load_layers 动态选择要加载的层模块,不幸的是,它不能与不评估代码的代码完成一起使用.