Из документации для пакета six
:
Примечание : чтобы выполнить импорт формы:
from six.moves.cPickle import loads work
шесть мест специального прокси
объекты в в sys.modules. Эти прокси лениво загружают базовый
модуль при получении атрибута.
Из-за этого распознаватель базовых путей в PyCharm не может легко найти фактический путь к модулям, которые импортируются для этого пакета и других, которые используют тот же подход.
Чтобы преодолеть эту проблему, PyCharm использует
Typeshed Stubs :
Typeshed - это набор файлов с аннотациями типов для стандарта
Библиотека Python и различные пакеты. Типпеды заглушки обеспечивают
определения для классов, функций и модулей Python, определенных с
Тип подсказки. PyCharm использует эту информацию для лучшего завершения кода,
проверки и другие функции анализа кода.
Заглушки с типами, которые можно найти в официальном репозитории , служат справочной таблицей. Например, если вы ищете функцию range
из six.moves
, которая является просто псевдонимом для встроенной функции range
, они помогут PyCharm узнать, как ее решить, указав, что при вводе from six.moves import range
это должно быть разрешено что-то вроде from builtins import range
.
Вы можете переопределить связанные заглушки с типами, следуя документации PyCharm .
Пример:
Если вы хотите использовать пакет six
и у вас есть структура папок, подобная этой:
six_reproduce
|─── main.py
│
│
├───external_libs
│ |────six.py
Перейдите в исходный репозиторий с типами и загрузите нужные вам заглушки.
Для Python 3 заглушки для библиотеки six
можно найти здесь .
Загрузите папку и поместите ее в external_libs
, чтобы структура вашего проекта стала такой:
six_reproduce
|─── main.py
│
│
├─── external_libs
│ |──── six
│ │ |──── moves
│ │ │
│ │ |──── __init__.pyi
│ │
│ |──── six.py
PyCharm теперь сможет разрешать импорт!