PyCharm выдает сообщение «неразрешенная ссылка», но может запустить код - PullRequest
1 голос
/ 14 января 2020

Я использую 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__, а просто импортировать модуль, как я делал выше?

Ответы [ 2 ]

1 голос
/ 14 января 2020

1) Когда ошибка предупреждений PyCharm (хотя и не частая), вы можете исправить ее, вырезав код и вставив его. Вы также можете попробовать перезапустить PyCharm.

2)

Насколько я понимаю, это делает a_package актуальным пакетом Python, тогда как раньше это просто каталог, содержащий Python файлы

Я согласен с вами по этому вопросу.

Я могу импортировать модули без файла __init__, так что вы тоже сможете.

0 голосов
/ 14 января 2020

Это проблема с PyCharm, а не с python, поэтому вы можете запустить его. Выберите папку root ваших источников (предположительно sr c), щелкните правой кнопкой мыши и выберите Пометить каталог как -> Источники Root.

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