【问题标题】:Circular import error only when importing specific function仅在导入特定功能时出现循环导入错误
【发布时间】:2021-12-05 00:02:10
【问题描述】:

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

from scapy.all import UDP

运行没有问题,但我无法使用 IDE 进行声明。如果我点击它显示没有找到声明。但是,如果我使用

from scapy.layers.inet import UDP

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

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'

【问题讨论】:

    标签: python scapy python-packaging


    【解决方案1】:

    简单的解决方法:

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

    当然,您随后必须确保 scapy.all 导入仍保留在文件的首位。

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

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

    【讨论】:

    • 是哪个 IDE,因为它与 Visual Studio 代码和 pycharm 一起使用
    • 为什么这个解决方案有效我很困惑......
    • 因为scapy.all模块以正确的顺序导入东西,所以没有循环导入。
    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多