(PyCharm Entwickler Antworten, über JetBrains Unterstützung)
Wie @alexce bemerken das zugrunde liegende Problem besteht darin, dass PyCharm nicht boto.kinesis.layer1
Bezug zu lösen und damit Symbol boto.kinesis.layer1.KinesisConnection
kann nicht zu lösen.
Normalerweise können Sie auf diese Weise nicht auf Untermodule eines Pakets verweisen (ohne sie explizit zu importieren). Wenn PyCharm es erlaubte, würde es Tonnen von falsch negativen Fehlern geben, wenn man vergisst, notwendige Importanweisungen hinzuzufügen. Aber weil solche Situationen ziemlich häufig sind, schauen wir durch boto/kinesis/__init__.py
versuchen, einige Hinweise zu finden, dass sys.modules['boto.kinesis']
möglicherweise bereits das Attribut layer1
enthalten.
Alles, was der folgenden tun würde:
from boto.kinesis import layer1
from . import layer1
from boto.kinesis.layer1 import KinesisConnection
import boto.kinesis.layer1
'layer1' in __all__
In der Tat __init__.py
in der Tat enthält die dritte dieser Import-Anweisungen, aber in einer Funktion:
def regions():
...
from boto.kinesis.layer1 import KinesisConnection
...
Da wir nicht garantieren können, statisch, dass Diese Funktion wird zur Laufzeit aufgerufen, wir haben nichts anderes zu tun, als vor der ungelösten Referenz im Editor zu warnen.
Beide von denen gearbeitet, danke. Ich schreibe eine Verbesserungsanfrage mit JetBrains, um den zusätzlichen Import zu vermeiden. –
@MarkHarrison Ich vermute, dass sie sich auf die Art und Weise beziehen würden, wie das 'boto.kinesis'-Paket strukturiert/definiert ist, da' layer1' nicht explizit in '__all__' aufgelistet ist, ähnlich wie http://stackoverflow.com/questions/23248017/ kann nicht-finden-Referenz-xxx-in-init-py-python-pycharm. – alecxe