PyCharm, разрешить библиотеку из папки проекта - PullRequest
4 голосов
/ 11 апреля 2019

У меня есть обычная библиотека, представленная в pypi.Внутри него есть хитрый способ разрешения имен в модулях, которые мы импортируем.Если я обычно устанавливаю его в папку Python, PyCharm разрешает его, строит скелет, и я получаю для него автозаполнение.Но в нашем проекте мы храним использованные библиотеки в папке проекта, а PyCHarm не читает и не обрабатывает библиотеку.Для этого я получил повышение инспекции "неразрешенные ссылки" и красную линию волны.

Как я могу сделать так, чтобы PyCharm разрешил библиотеку в папке проекта?

Пример:

MyProjectRoot
    -- external_libs
        --six.py

Когда я пишу:

from external_libs.six.moves import range

PyCharmотметки «переместились» желтым цветом, а «диапазон» - красной волнистой линией.

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Из документации для пакета 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 теперь сможет разрешать импорт!

0 голосов
/ 17 апреля 2019

Попробуйте это:

import sys
sys.path.append("external_libs")
import six
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...