Неразрешена препратка при импортиране от сроден подпакет с

Следвам подобна структура на директория.

main.py
pack
   |___sub_pack1
                |__a.py
   |___sub_pack2
                |__b.py

Сега вътре в main.py (която е основната ми програма, която изпълнявам) импортирам като follow

from pack.sub_pack1 import a

Работи добре.

Вътре в a.py импортирам като follow

from pack.sub_pack2 import b

В този момент pycharm подчертава горния код като червен и ме уведомява „Неразрешен референтен пакет“.

Сега кодът ми работи добре, което би трябвало. Любопитен съм защо pycharm го смята за грешка и какво мога да направя, за да избегна подобно нещо.


person Ansuman Bebarta    schedule 31.07.2013    source източник
comment
Изглежда, че PyCharm по някаква причина очаква да имате __init__.py в пакета, за да работи нелокалното импортиране. Което е технически задължително за пакетите на Python, но всъщност не е валидирано от интерпретатора и очевидно се прави непоследователно в рамките на PyCharm, който търси къде да разрешава импортирането.   -  person millimoose    schedule 31.07.2013
comment
Това каза, че трябва да подадете това като грешка с JetBrains, имам много добър опит с тях, които бързо разрешават неприятности като това.   -  person millimoose    schedule 31.07.2013
comment
Със сигурност добавих init.py. Получих помощ от форума на pycharm. Ще актуализирам, ако получа някакъв отговор.   -  person Ansuman Bebarta    schedule 01.08.2013
comment
Същият проблем тук: братски подпакет (с __init__.py, разбира се), споделящ същото пространство от имена като това на проекта PyCharm, не се разпознава като такъв от проверките на PyCharm, въпреки че кодът работи добре. Двете решения, предложени по-долу, не работят за мен, тъй като под-пакетът с брат не е част от изходния код, а се намира в папката Python27\Lib\site-packages.   -  person kadee    schedule 13.04.2016


Отговори (2)


Друго нещо, което можете да направите, ако имате проблеми с грешките „Нерешена справка“ в PyCharm, е:

  • Щракнете с десния бутон върху директорията с източници на Python
  • Изберете „Маркиране на директорията като“ > „Корен на източника“

Уверете се, че сте направили това за всичките си изходни директории на Python.

person einnocent    schedule 06.12.2013
comment
благодаря ви, че споменахте Source Root. Поправи проблема, който имах с PyCharm. - person LoveGandhi; 07.02.2014
comment
Не забравяйте да File - Invalidate caches / Restart след това. - person Patrizio Bertoni; 30.03.2015

Отидете на настройки-> структура на проекта и sub_pack2 като източник

person leet    schedule 25.09.2013
comment
Това проработи при мен! Просто се уверете, че всички src папки на всички подпакети са добавени като изходна папка в настройките на структурата на проекта на вашия проект - person chris LB; 24.03.2016