Невирішене довідкове питання в 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файл?
Puffin GDI

@Puffin GDI: Ні, це не так.
prosseek

5
@PuffinGDI Чи потрібні папки src цього init .py-файлу?
Джек Чі

Так для того , щоб пітон , щоб ідентифікувати пакети: stackoverflow.com/questions/42094723 / ...
rnoodle

Я перейменував назву класу і продовжую працювати над ним. Коли я натиснув Run, виникла ця помилка, повністю забула перейменування та спробувала шукати пропозиції pycharm під час імпорту. Чорт, пропозиції враховують регістри! - Новий пітон !!
Vignesh Paramasivam

Відповіді:


817

Вручну додати його, як ви зробили, це дійсно один із способів цього зробити, але є більш простий метод, і це просто сказати pycharm, що ви хочете додати srcпапку як вихідний корінь, а потім додати корінь джерела до вашого python шлях.

Таким чином, вам не доведеться важко кодувати речі в налаштуваннях вашого перекладача:

  • Додати srcяк корінь вихідного вмісту:

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

  • Потім обов’язково додайте джерела для додавання PYTHONPATH:

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

  • Тепер імпорт буде вирішено:

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

Таким чином, ви можете додати все, що завгодно, як вихідний корінь, і все просто вийде. Якщо ви немаркованих це як корінь джерела , однак, ви будете отримувати повідомлення про помилку:

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

Після цього не забудьте перезапустити. У меню PyCharm виберіть: Файл -> Недійсний кеш / Перезапуск


16
Це також працює, якщо ви використовуєте плагін Python з IntelliJ.
грабувати майофф

13
Це рішення працює. Проблема полягає в тому, що коли інший програміст витягує код з svn, він повинен знову робити ті самі налаштування, щоб позбутися від запиту про помилку "невирішеної посилання".
Бен Лін

2
@GamesBrainiac, рішення полягає в тому, що IDE може проаналізувати "sys.path.insert (0,.
Бен Лін

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 виберіть: Файл -> Недійсний кеш / Перезапуск

11
Цей останній крок був єдиним, що бракувало мого рішення. Прийнята відповідь може додати це до неї.
targetbire

без останнього кроку, згаданого тут, прийнята відповідь не працює. Прийнята відповідь повинна також додати цей крок /
santhosh kumar

23

Якщо хтось все ще дивиться на це, прийнята відповідь все ще працює для PyCharm 2016.3, коли я спробував це. Користувальницький інтерфейс, можливо, змінився, але варіанти все одно ті ж.

тобто. Клацніть правою кнопкою миші на вашій кореневій папці -> "Позначити каталог як" -> Вихідний корінь


1
Стільки складних відповідей у ​​цій дискусії. Представлене тут рішення спрацювало для мене так легко.

16

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

піхарм префренс


Це прекрасно працює для мене. Я встановив pygameтам і не більш невирішене довідкове питання!
Michal Przybylowicz


5

Як правило, це проблема з відсутнім пакетом, просто поставте карету на невирішене посилання та натисніть, Alt+Enterщоб розкрити варіанти, тоді ви повинні знати, як її вирішити.


4

Після виконання прийнятої відповіді, виконавши наступне, вирішив це для мене:

FileSettingsProject <your directory/project>Project Dependencies

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

Ієрархія моїх папок дещо відрізняється від тієї, у якій йдеться. Моя така

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

Сказати Pycharm, що 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 має бути синього кольору.


-1

Pycharm використовує venv. У консолі venv слід встановити пакунки явно або зайти settings -> project interpreter -> add interpreter -> inherit global site-packages.


-1

У новіших версіях pycharm u це можна зробити, клацнувши правою кнопкою миші на папку або пакет python, з якого потрібно імпортувати файл, а потім натиснути «Позначити каталог як» -> «Коріння джерел»


-1

Найпростіший спосіб виправити це, виконавши наступне у вашому програмному забезпеченні pyCharm:

Клацніть на: Файл> Налаштування> (Проект: назва вашого проекту)> Перекладач проекту>

потім натисніть на значок "+" праворуч, щоб знайти потрібний пакет та встановити його.

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


1
Ласкаво просимо до переповнення стека та дякуємо за вашу відповідь. Незважаючи на те, що це може бути правильним, надалі уникайте публікацій зображень або посилань на інші сайти без контексту та додаткових відомостей. Посилання може перестати працювати в якийсь момент, що зробить цю відповідь менш корисною для інших користувачів.
CyberJacob

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