PyCharm не предлагает автозаполнение и помечает неразрешенную ссылку

Я пытаюсь создать простую scapy-программу, но PyCharm не предлагает завершения кода и отмечает «неразрешенную ссылку». Однако программа работает.

Я использую последнюю версию PyCharm в Mac OS 10.14 и свой системный интерпретатор Python (/usr/local/bin/python3.7).

from scapy.all import *

def arp_display(pkt):
    pkt.summary()
    if pkt[ARP].op == 1:
        print("%s demande qui est %s" % (pkt[ARP].psrc, pkt[ARP].pdst))
    elif pkt[ARP].opH == 2:
        print("%s possède l'addresse %s" % (pkt[ARP].psrc, pkt[ARP].hwsrc))

sniff(prn=arp_display, filter="arp", store=0, count=10)

ARP помечается как неразрешенная ссылка, и когда я набираю pkt. и ctrl + space, PyCharm не предлагает show(), summary() и другие методы, как следует.


person Théo B.    schedule 30.04.2019    source источник
comment
Отредактировал вопрос, чтобы он был понятен. По сути, OP использует Pycharm на Mac OS с системным интерпретатором. Pycharm не предлагает никакого автозаполнения для элементов этого конкретного модуля.   -  person MaximGi    schedule 30.04.2019
comment
Спасибо за исправление, не очень хорошо говорит по-английски :S Что такое ОП?   -  person Théo B.    schedule 01.05.2019
comment
ОП (оригинальный постер) это ты   -  person MaximGi    schedule 01.05.2019


Ответы (1)


Ничего не поделаешь против этого :/

(См. https://stackoverflow.com/a/53402404/5459467 для более полного ответа)

Scapy динамически загружает свои модули слоев. Это позволяет пользователям Scapy переключать загрузку каждого слоя отдельно, но IDE не смогут обнаружить импорт.

Чтобы обойти это, вы можете импортировать слои непосредственно из их конкретного файла, а не Scapy.all.

Например:

from scapy.layers.l2 import ARP
from scapy.sendrecv import sniff

Несмотря на то, что это занимает больше времени, это намного чище (поскольку вы не импортируете все). Если вы не знаете, в каком модуле находится слой, просто help() для него в оболочке Scapy.

person Cukic0d    schedule 01.05.2019