Я использую PyCharm 2019.2.5 на примере игрушки. У меня следующая структура каталогов:
├── main.py
├── a_package
│ ├── a_module.py
Мой a_module.py
файл выглядит так:
class a_class:
def __init__(self):
self.a_variable = 5
А мой main.py
файл выглядит так:
from a_package import a_module
x = a_module.a_class()
print(x.a_variable)
Запуск main.py
Вывод 5
. Это как и ожидалось. Однако у меня есть пара вопросов обо всем этом.
1) В main.py
, в строке from a_package import a_module
, оба a_package
и a_module
имеют красную линию внизу в PyCharm. Если навести указатель мыши на это, отобразятся «Неразрешенная ссылка« a_package »и« Неразрешенная ссылка «a_module» ». Почему это происходит? PyCharm явно может найти эти файлы, так как код работает нормально.
Я также попытался добавить каталог a_package
в «Источники» в «Настройки -> Проект -> Структура проекта». Однако это ни на что не влияет. PyCharm по-прежнему дает мне сообщение о том, что он не может найти эти ссылки. Согласно документации PyCharm об исходных корнях, «эти корни содержат фактические исходные файлы и ресурсы. PyCharm использует исходные корни в качестве отправной точки для разрешения импорта». Таким образом, даже после добавления этого каталога в источник root, странно, что он выдаёт мне эту ошибку / предупреждение. Почему это происходит?
2) Я часто вижу структуру, аналогичную приведенной выше, но с пустым файлом __init__
следующим образом:
├── main.py
├── a_package
│ ├── __init__.py
│ ├── a_module.py
Насколько я понимаю, это делает a_package
фактический Python пакет, тогда как раньше это просто каталог, содержащий Python файлов. Но зачем это делать? Почему я могу не просто получить его, как у меня изначально, без файла __init__
, а просто импортировать модуль, как я делал выше?