Нерешенная подсветка ссылок Pycharm - PullRequest
0 голосов
/ 19 сентября 2019

Мне трудно понять, как pyCharm разрешает ссылки

У меня есть такая структура проекта:

ProjectFolder/
   main.py
   libraries/
       my_library.py
       sublibraries/
          my_sublibrary.py

В основном библиотеки - это папка, содержащая некоторые файлы (библиотеки) и некоторыеподпапки для лучшего структурирования библиотек

main.py импортирует из библиотек и sublibraries без проблем.my_library.py импортирует некоторые классы из sublibraries

# inside my_library.py
from sublibraries.my_sublibrary import MyClass

Однако pycharm выделяет сублибрарии красным цветом с ошибкой

Unresolved reference 'sublibraries'

Это на самом деле не влияет на выполнение программы.Он работает нормально, но красная подсветка раздражает.

Я понимаю, что pycharm имеет ProjectFolder в качестве текущей папки и не может найти подпапки, так как в середине есть папка.

Я попробовал парувещей:

Я могу решить эту проблему с помощью mark directory as sources root, но я не уверен, что это делает, и, поскольку я не передаю файлы .idea, тот, кто извлекает хранилище, имеет ту же проблему с подсветкой и имеетчтобы вручную сделать то же самое.

Я также попытался сделать относительный импорт

# inside my_library.py
from .sublibraries.my_sublibrary import MyClass

Это решает проблему выделения, но затем программа выдает ошибку:

ModuleNotFoundError: No module named '__main__.sublibraries'; '__main__' is not a package

Я не уверен, каков наилучший подход, чтобы такая простая файловая структура работала, была способна распространять ее через git и иметь правильную подсветку.Должен ли я зафиксировать .idea файлы, чтобы другие могли импортировать настройки pycharm и использовать опцию Mark as Sources Root?

1 Ответ

0 голосов
/ 19 сентября 2019

Вы можете создать пустые файлы __init__.py в папках libraries/ и sublibraries/, которые превратят эти папки в (суб) пакеты.Это заставит относительный импорт работать (и уберет выделение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...