Нерешенная справочная проблема в PyCharm


373

У меня есть структура каталогов

├── simulate.py
├── src
   ├── networkAlgorithm.py
   ├── ...

И я могу получить доступ к сетевому модулю с sys.path.insert().

import sys
import os.path
sys.path.insert(0, "./src")
from networkAlgorithm import *

Однако pycharm жалуется, что не может получить доступ к модулю. Как я могу научить pycham разрешить ссылку?

введите описание изображения здесь


4
Есть ли в папке src __init__.pyфайл?
тупик GDI

@Puffin GDI: Нет, это не так.
prosseek

5
@PuffinGDI Нужен ли этот файл init .py папкам src ?
Джек Чи

Да, чтобы Python мог идентифицировать пакеты: stackoverflow.com/questions/42094723/…
rnoodle

Я переименовал имя класса и продолжаю работать над ним. Когда я нажал run, произошла эта ошибка, я полностью забыл переименовать и попытался найти предложения pycharm во время импорта. Блин, предложения чувствительны к регистру! - Новый в питоне!
Vignesh Paramasivam

Ответы:


818

Добавление его вручную, как вы сделали , действительно является одним из способов сделать это, но есть более простой метод, и это просто сказать Pycharm, что вы хотите добавить srcпапку в качестве исходного корня, а затем добавить исходный корень в ваш Python. дорожка.

Таким образом, вам не нужно жестко кодировать вещи в настройках вашего интерпретатора:

  • Добавить srcв качестве исходного содержимого корень:

                            введите описание изображения здесь

  • Затем убедитесь, что добавили источники в ваш PYTHONPATH:

введите описание изображения здесь

  • Теперь импорт будет разрешен:

                      введите описание изображения здесь

Таким образом, вы можете добавить все, что вы хотите, в качестве исходного корня, и все будет просто работать. Если вы немаркированное это как корень источника , однако, вы будете получать сообщение об ошибке:

                                  введите описание изображения здесь

После всего этого не забудьте перезагрузить. В меню PyCharm выберите: File -> Invalidate Caches / Restart


17
Это также работает, если вы используете плагин Python с IntelliJ.
Роб Майофф

13
Это решение работает. Проблема в том, что когда другой программист получает код из svn, он должен снова выполнить те же настройки, чтобы избавиться от сообщения об ошибке «неразрешенная ссылка».
Бен Лин

2
@GamesBrainiac, решение состоит в том, что IDE может проанализировать "sys.path.insert (0," ./src ")", добавить это в PYTHONPATH для этого конкретного файла, а затем дать надлежащий синтаксический анализ.
Бен Лин

2
Вы также должны убедиться, что ваш корневой путь к контенту указан правильно. В Pycharm 5 вы можете найти это в Предпочтения -> Проект -> Структура проекта.
LPS

1
Как ни странно, подкаталоги не учитываются. Например, если под src, у нас есть viewsпапка, внутри которой я myview.py, я все еще получаю неразрешенную ссылку ссылки при попытке from src.views.myview import <my_function>...
SexyBeast

49
  1. проверить наличие __init__.pyфайла в srcпапке
  2. добавить srcпапку в качестве исходного корня
  3. Затем убедитесь, что добавили добавить источники к вашему PYTHONPATH(см. Выше)
  4. в меню PyCharm выберите: File -> Invalidate Caches / Restart

11
Этот самый последний шаг был единственным, чего не хватало в моем решении. Принятый ответ может добавить это к этому.
цель

без последнего шага, упомянутого здесь, принятый ответ не работает. Принятый ответ также должен добавить этот шаг /
santhosh kumar

23

Если кто-то все еще смотрит на это, принятый ответ все еще работает для PyCharm 2016.3, когда я попробовал. Пользовательский интерфейс мог измениться, но варианты остались прежними.

то есть. Щелкните правой кнопкой мыши на вашей корневой папке -> «Отметить каталог как» -> Source Root


1
Так много сложных ответов в этой дискуссии. Представленное здесь решение сработало для меня так легко.

16

После тестирования всех обходных путей, я предлагаю вам взглянуть Settings -> Project -> project dependenciesи перестроить их.

предпочтение


Это прекрасно работает для меня. Я установил pygameтам и не более нерешенной проблемы справки!
Михал Przybylowicz


5

Как правило, это проблема с отсутствующим пакетом, просто поместите каретку на неразрешенную ссылку и нажмите, Alt+Enterчтобы открыть параметры, тогда вы должны знать, как ее решить.


4

После того, как вы приняли принятый ответ, мне удалось решить следующее:

FileSettingsProject <your directory/project>Project Dependencies

Выберите каталог / проект, в котором находится файл с неразрешенным импортом, и установите флажок, чтобы сообщить Pycharm, что этот проект зависит от вашего другого проекта.

Моя папка иерархии немного отличается от той, что в вопросе. Мой так

├── MyDirectory  
     └── simulate.py  
├── src  
     ├── networkAlgorithm.py  
     ├── ...

Говоря Пичарму, что src зависит от решенного MyDirectoryвопроса для меня!


4

Хотя все ответы действительно полезны, есть один маленький кусочек информации, который следует объяснить в явном виде:

  • По сути, проект с несколькими иерархическими каталогами работает как пакет с некоторыми атрибутами.
  • Чтобы импортировать пользовательские локально созданные классы, нам нужно перейти в каталог, содержащий .pyфайл, и создать там __init__.py(пустой) файл.

Это помогает, потому что этот файл необходим, чтобы Python рассматривал каталог как содержащий пакеты. Ура!


3

Установить через PyCharm (работает с Community Edition). Откройте вверх, Settings > Project > Project Interpreterзатем нажмите зеленый значок + на снимке экрана ниже. Во втором открывшемся диалоговом окне введите имя пакета и нажмите кнопку «Установить пакет».

введите описание изображения здесь


2

Часто случается так, что плагин не установлен. например

Если вы разрабатываете проект django и у вас не установлен плагин django в pyCharm, он говорит об ошибке «неразрешенная ссылка». См. Https://www.jetbrains.com/pycharm/help/resolving-references.html.


Пришлось объединить это + принятый ответ ( stackoverflow.com/a/21241988/6448384 ).
Каруханга

1

Пожалуйста, проверьте, если вы используете правильный переводчик, который вы должны. Я получаю сообщение об ошибке «неразрешенная ссылка« django »», чтобы решить эту проблему. Я изменил интерпретатор проекта (изменен с Python 3 на Python 2.7) в настройках проекта: выберите «Проект», выберите «Файл» -> «Настройки» -> «Проект» -> «Интерпретатор проекта» -> «Брови». и выберите правильную версию или интерпретатор (например, /usr/bin/python2.7).


1

В моем случае проблема заключалась в том, что я использовал, Virtual environmentкоторый не имел доступа к глобальным пакетам сайта. Таким образом, интерпретатор не знал о вновь установленных пакетах.

Чтобы решить эту проблему, просто отредактируйте или воссоздайте своего виртуального переводчика и отметьте Inherit global site-packagesопцию.

введите описание изображения здесь


Разве это не приводит к нежелательным последствиям и не приводит к одной из причин использования виртуальной среды? То есть, если вы куда-то переносите эту среду и устанавливаете эти глобальные пакеты сайтов, то у вас проблемы. Это то, о чем я думал.
theStud54


0

Готово в PyCharm 2019.3.1 Щелкните правой кнопкой мыши на папке src -> «Пометить каталог как» -> Нажмите «Исключено», и ваша папка src должна быть синего цвета.


0

Для меня добавление venvпути к пакетам сайта virtualenv ( ) к путям интерпретатора работает. В заключение!

введите описание изображения здесь


-1

Pycharm использует venv. В консоли venv вы должны установить пакеты явно или войти settings -> project interpreter -> add interpreter -> inherit global site-packages.


-1

В более новых версиях pycharm вы можете сделать это, просто щелкнув правой кнопкой мыши каталог или пакет python, из которого вы хотите импортировать файл, затем нажмите «Пометить каталог как» -> «Корень источника»


-1

Самый простой способ это исправить - сделать в программном обеспечении pyCharm следующее:

Нажмите: Файл> Настройки> (Проект: название вашего проекта)> Интерпретатор проекта>

затем нажмите значок «+» справа, чтобы найти нужный пакет и установить его.

Наслаждайтесь кодированием !!!


1
Добро пожаловать в Stack Overflow и спасибо за ваш ответ. Хотя это может быть правильным, в будущем избегайте публикации изображений или ссылок на другие сайты без контекста или дополнительной информации. Ссылка может перестать работать в какой-то момент, что делает этот ответ менее полезным для других пользователей.
CyberJacob

@CyberJacob Большое спасибо и большое спасибо за ваш совет. Я отредактировал ответ, удалив изображение и добавив вместо него текст.
zaid.mohammed
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.