(ответов разработчиков PyCharm, через поддержку JetBrains)
Как отмечено @alexce основная проблема заключается в том, что PyCharm не решает boto.kinesis.layer1
ссылки и, следовательно, символов, чтобы boto.kinesis.layer1.KinesisConnection
не может быть решена тоже.
Обычно вы не можете обращаться к подмодулям пакета таким образом (без их импорта явно). Если бы PyCharm разрешил это, было бы много ложных отрицательных ошибок, если вы забудете добавить необходимую импорту. Но поскольку подобные ситуации довольно распространены, мы просматриваем boto/kinesis/__init__.py
, пытаясь найти некоторые признаки того, что sys.modules['boto.kinesis']
может уже содержать атрибут layer1
.
Все из перечисленного лучше сделать:
from boto.kinesis import layer1
from . import layer1
from boto.kinesis.layer1 import KinesisConnection
import boto.kinesis.layer1
'layer1' in __all__
На самом деле __init__.py
действительно содержит треть этих операторов импорта, но внутри функции:
def regions():
...
from boto.kinesis.layer1 import KinesisConnection
...
Поскольку мы не можем гарантировать, что статически эта функция вызывается во время выполнения, нам больше нечего делать, кроме предупреждения о неразрешенной ссылке в редакторе.
Обе из них работали, спасибо. Я делаю запрос расширения с помощью JetBrains, чтобы устранить необходимость в дополнительном импорте. –
@MarkHarrison Я подозреваю, что они будут ссылаться на способ структурирования/определения пакета 'boto.kinesis', поскольку' layer1' явно не указан внутри '__all__', выглядит как http://stackoverflow.com/questions/23248017/ не может-найти-справочно-ххх-в-Init-ру-питон-PyCharm. – alecxe