PyCharm показывает ошибку неразрешенных ссылок для допустимого кода


279

Я использую PyCharm для работы над проектом. Проект открывается и настраивается с помощью переводчика и может успешно выполняться. Пути удаленного интерпретатора отображаются правильно. Кажется, это правильная конфигурация, но PyCharm выделяет мой действительный код ошибками «неразрешенная ссылка», даже для встроенных функций Python. Почему они не обнаруживаются, хотя код работает? Есть ли способ заставить PyCharm правильно их распознать?


Этот конкретный случай проблемы связан с удаленным переводчиком, но проблема возникает и с локальными переводчиками.


У меня та же проблема, и я ее решил. Здесь решение .
Макс

Ответы:


445

Файл | Invalidate Caches ... и перезапуск PyCharm помогает.


3
Это единственный способ работы с PyCharm 4.0.x в моем случае. Дело в том, что если что-то испортилось и не обновляется (иногда даже показывает, что один и тот же интерпретатор повторяется несколько раз в списке), вам придется удалять файлы вручную ... Мне даже приходилось удалять папки .idea один раз ,
Даниус

10
Это так тяжеловесно. Нет ли способа вернуть старую опцию «Обновить путь» обратно в PyCharm 4.5?
Крис Уизерс

6
Действительно раздражает, что такая IDE не заботится о такой простой операции.
Эдуардо Пигнателли

3
Это работает на мгновение. Через несколько минут я снова получаю то же предупреждение
Aseem

Принятый ответ имеет большой вес и, скорее всего, не решает суть проблемы. Вот информация прямо из уст лошадей: JetBrains - корень контента PyCharm «PyCharm использует корни источника в качестве отправной точки для разрешения импорта» У меня была проблема точно так же, как в заголовке, потому что в некоторых проектах мне нужно использовать дерево файлов, где исходники находятся в подпапке, PyCharm затем запутывается в импорте. Убийство кеша может помочь на мгновение, но это неправильный подход. Пометить каталог источников как root и все хорошо.
predmod

133

Ответ Дмитрия не сработал для меня.

Я начал работать, перейдя в Project Interpreters, выбрав вкладку «Пути» и нажав кнопку «Обновить» в этом подменю. Он автоматически заполняется чем-то, что называется "python-остов".

edit : скриншот с использованием PyCharm 3.4.1 (он довольно хорошо спрятан)

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


6
Где "переводчики Python". Вы имеете в виду "переводчики проекта"? Я использую Linux и не могу найти вкладку Paths.
Баская

1
В PyCharm 3.4 для OSX это значок, который выглядит как небольшое дерево папок и не говорит «Пути».
Дэниел Бушман,

12
Для тех, кто все еще в замешательстве (в PyCharm 3.4.1):Settings > Project Settings > Project Interpreter > Project Interpreters (gear button > more) > --Select the interpreter-- > Interpreter Paths (Directory Tree button on the right) > Reload List of Paths (Blue refresh-like button)
Raphaeltm

5
В PyCharm 4 такой кнопки обновления нет, есть только знаки плюс и минус.
Дтеодор

3
@Sarah В PyCharm 4.0.4 в окне «Пути интерпретатора» у меня нет кнопки «Перезагрузить список путей» (нижний синий значок обновления). Кроме того, я не вижу никаких путей в списке, а кнопки плюс и минус отключены.
Хенрик Хаймбюргер

70

Есть много решений для этого, некоторые удобнее, чем другие, и они не всегда работают.

Вот все, что вы можете попробовать, переходя от «быстрого» к «раздражающему»:

  • Сделайте File-> Invalidate Caches / Restartи перезапустите PyCharm.
    • Вы также можете сделать это после любого из следующих методов, просто чтобы быть уверенным.
  • Сначала проверьте, какой интерпретатор вы используете: Run-> Edit Configurations-> Configuration-> Python Interpreter.
  • Обновите пути вашего переводчика:
    • File -> Settings
    • Project: [name]-> Project Interpreter-> «Интерпретатор проекта»: значок шестеренки ->More...
    • Нажмите кнопку «Показать пути» (внизу)
    • Нажмите кнопку «Обновить» (внизу)
  • Удалите переводчик и добавьте его снова:
    • File -> Settings
    • Project: [name]-> Project Interpreter-> «Интерпретатор проекта»: значок шестеренки ->More...
    • Нажмите кнопку «Удалить»
    • Нажмите кнопку «Добавить» и повторно добавьте свой интерпретатор
  • Удалить настройки проекта
    • Удалить .ideaпапку вашего проекта
    • Закройте и снова откройте PyCharm
    • Откройте свой проект с нуля
  • Удалите свои пользовательские настройки PyCharm (но сначала сделайте их резервную копию).
    • ~/.PyCharm50 на Mac
    • %homepath%/.PyCharm50 в Windows
  • Переключитесь на другого переводчика, затем снова вернитесь к тому, кого вы хотите.
  • Создайте новую виртуальную среду и переключитесь на интерпретатор этой среды.
  • Переключитесь на другого переводчика вообще, не переключайтесь обратно.

У меня была эта проблема до тех пор, пока я использую PyCharm, и они до сих пор не могут ее надежно исправить. Хорошо, что вы, так или иначе, рассмотрели большую часть работы вокруг, в итоге решили проблему. Забавно, как я время от времени возвращаюсь к этому ответу, чтобы выяснить, какую работу я забыл попробовать.
Алекс

3
Я пробирался вниз по этому списку, и удаление / повторное добавление интерпретатора работало для меня. Спасибо!
Марк

16

В моем случае это была структура каталогов. Мой проект выглядит так:

+---dir_A
    +---dir_B
        +app
        |
        \-run.py

Поэтому щелкните правой кнопкой мыши на dir_b> "пометить каталог как"> "корневой каталог проекта"


2
Вопрос не в том, что PyCharm не распознает код проекта . Он не распознает стандартные встроенные методы Python.
Флорида

Решил мою проблему с PyCharm 2019.3.3 для MacOS
samisnotinsane

11

Я обнаружил, что удаляю и повторно добавляю удаленный интерпретатор, чтобы решить эту проблему, когда Invalidating Cache или Refreshing Paths не работает.

Я использую vagrant и каждый раз, когда я добавляю новую виртуальную машину в мою настройку multi-vm, перенаправленный порт изменяется, и это, кажется, сбивает с толку PyCharm, когда он пытается использовать неправильный порт для SSH. Изменение порта, кажется, не помогает сломанным ссылкам.


10

Если ни одно из других решений не работает для вас, попробуйте (резервное копирование) и удалите папку ~ / .PyCharm40, а затем снова откройте PyCharm. Это также убьет все ваши предпочтения.

На Mac вы хотите удалить ~ / Library / Caches / Pycharm40 и ~ / Library / Preferences / PyCharm40.

И в Windows: C: \ Users \ $ USER.PyCharm40.


10

Протестировано с PyCharm 4.0.6 (OSX 10.10.3), выполнив следующие действия:

  1. Нажмите меню PyCharm.
  2. Выберите переводчика проекта.
  3. Выберите значок шестеренки.
  4. Выберите кнопку Больше.
  5. Выберите переводчика проекта, в котором вы находитесь.
  6. Выберите кнопку дерева каталогов.
  7. Выберите Обновить список путей.

Задача решена!


10

очень просто

вам просто нужно пометить корневой каталог как: SOURCE ROOT (красный), а ваши приложения: EXCLUDED ROOT (синий),

тогда неразрешенная ссылка исчезнет.

  • введите описание изображения здесьесли вы используете PyChram pro, то сделайте это автоматически.

5
У меня есть pycharm pro, и он не сделал этого для меня, но после того, как я вручную пометил папки, все
Jose

Да, это правильный ответ, а не какой-то ядерный вариант, когда побочный эффект на мгновение помогает, но не учитывает то, как думает инструмент реактивных мозгов («убить кеш», верно ... и когда он будет восстановлен? »Убить его снова ! "). Заголовок, который был проблемой в моих проектах, где корень проекта не обязательно является корнем источника, а импорт не понимает этого. Вот информация прямо изо рта лошади jetbrains.com/help/pycharm/content-root.html «PyCharm использует исходные корни в качестве отправной точки для разрешения импорта»!
predmod

6

Извините, что поднял этот вопрос, но мне нужно сделать важное обновление.

Вы также можете захотеть вернуть ваш интерпретатор проекта на Python 2.7.6, если вы используете любую другую версию, кроме этой. Это сработало для меня при установке Ubuntu PyCharm 4.04 professional после того, как ни одна из других рекомендаций не решила мою проблему.


1
Переключение на локальный интерпретатор Python 2, а затем снова на удаленный интерпретатор Python 3 исправило это и для меня.
Джеймс Флетчер

Это работает и на PyCharm 5 professional. Ни одно из других решений в этом посте не сработало для меня. Я вошел Settings -> "Project Interpreters", включил передачу, а затем "More...". Выберите интерпретатор Python по умолчанию ( /usr/bin/python2.7в моем случае), нажмите "Ok"и "Apply". Затем вернулся и выбрал фактическое virtualenv, которое я хотел использовать. "Ok"и "Apply"снова, и это исправлено.
Джош

Точно так же FileNotFoundErrorвещь Python-3-only. После того, как я установил правильный интерпретатор и в File-Settings-Project-Interpreter, и в Run-Edit-Configurations, один из них сделал ошибку исчезла
Боб Стейн

3

Вы можете попробовать закрыть Pycharm, удалить .ideaпапку из вашего проекта, затем снова запустить Pycharm и заново создать проект. Это сработало для меня, тогда как аннулирование кэша - нет.


2

Я, наконец, получил это работать после того, как ни одно из предложенных решений не сработало для меня. Я играл с проектом django rest framework и использовал virtualenv, который у меня был с ним. Я смог исправить Pycharm, пометив корневую папку как источник root, но затем сервер django выдал исключения для разрешения проблем. Таким образом, один будет работать, когда другой не будет, и наоборот.

В конечном итоге мне просто нужно было отметить подпапку как корень источника в pycharm. Так что моя структура была такой

-playground
     -env
     -playground

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

Просто подумала, что поделюсь, если кто-то еще сможет это использовать.


2

Это также может быть проблемой версии Python. Я должен был выбрать правильный, чтобы он работал. введите описание изображения здесь


2

Если вы хотите игнорировать только некоторые ошибки «неразрешенной ссылки», вы также можете явно указать это PyCharm, поместив это перед вашим классом / методом / функцией:

# noinspection PyUnresolvedReferences

1

Я закрыл все остальные проекты и запустил необходимый проект в Pycharm. Я создал отдельный virtualenv из pycharm и добавил в него все необходимые модули, используя pip. Я добавил эту виртуальную среду в интерпретатор проекта. Это решило мою проблему.


1

Черт возьми, какой кошмар, мое объединение различных StackOVerflow отвечает:

  1. Переключитесь на локального переводчика /usr/bin/pythonX.X и примените
  2. Посмотреть пути как выше ответ
  3. Найти скелеты пути. Моя была (/home/tim/Desktop/pycharm-community-2016.2.3/helpers/python-skeletons)
  4. Вернитесь к virt-интерпретатору и добавьте путь к скелетам вручную, если он не обнаружился автоматически.

1

Ни одно из вышеперечисленных решений не сработало для меня!
Если вы используете виртуальную среду для своего проекта, убедитесь, что python.exeфайл, который находится в каталоге вашей виртуальной среды в качестве интерпретатора проекта, (Alt + Ctrl + Shift + S) решил эту проблему для меня.


1

В моем случае ошибка проверки появляется из-за очень специфического случая кода Python. Функция min, которая содержит две функции numpy и два доступа к списку, позволяет проверке моего кода выдавать подобные ошибки.

Удаление строки «d = 0» в следующем примере, как и ожидалось, приводит к неразрешенной ошибке ссылки, но чтение не устраняет ошибку для инспектора кода. Я все еще могу выполнить код без проблем впоследствии.

import numpy as np
def strange(S, T, U, V):
    d = 0
    print min(np.abs(S[d]), np.abs(T[d]), U[d], V[d])

Очистка кешей и перезагрузка списка путей не работает. Работает только изменение кода с одним из следующих примеров исправлений:

  • Другой порядок параметров 'min': схематически SUTV, но не STUV или TSUV
  • Использование метода вместо функции: S [d] .abs () вместо np.abs (S [d])
  • Использование встроенной функции abs ()
  • Добавление числа к выбранному параметру: U [d] + 0.

1

Ни один из ответов не решил мою проблему.

Для меня это было переключением среды и возвращением к той же среде. File->Settings->Project interpreter

Я использую среду conda.


1

Работал для меня гораздо проще :


File > Settings > Project > Project Interpreter 
> Select "No interpreter" in the "Project interpreter" list 
> Apply > Set your python interpreter again > Click Apply

Прибыль - Pycharm обновляет скелеты, и все в порядке.


0

Если вы используете vagrantошибку, это может быть вызвано неправильным интерпретатором Python. В наших vagrantмы используем , pyenvтак что я должен был изменить Python Interpreter pathпуть от /usr/bin/pythonк/home/vagrant/.pyenv/versions/vagrant/bin/python введите описание изображения здесь


0

У меня есть проект, где один файл src/импортирует другой файл в том же каталоге. Чтобы PyCharm узнал, мне нужно было перейти в Файл> Настройки> Проект> Структура проекта> выбрать srcпапку и нажать «Пометить как: источники»

С https://www.jetbrains.com/help/pycharm/configuring-folders-within-a-content-root.html

Исходные корни содержат фактические исходные файлы и ресурсы. PyCharm использует исходные корни в качестве отправной точки для разрешения импорта


0

Моя проблема в том, что Flask-WTF не разрешается PyCharm . Я попытался переустановить, а затем установить или сделать недействительным кэш и перезапустить PyCharm, но он все еще не работает.

Тогда я пришел с этим решением, и оно отлично работает для меня.

  1. Откройте Project Interpreter , нажав Ctrl + Alt + S (Windows), и нажмите « Установить» (+) нового пакета.

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

  1. Введите пакет, который не разрешен PyCharm, и нажмите « Установить пакет» . Затем нажмите ОК .

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

Теперь вы увидите, что ваша библиотека была решена.


-1

Вы используете virtualenv?

если это так, вам нужно уведомлять PyCharm о каждом изменении местоположения нужного python.exe (просто ./activate недостаточно для PyCharm)

Убедитесь, что Pycharm указывает на правильный интерпретатор и пакеты: Файл -> Настройки -> Проект -> Интерпретатор проекта. Нажмите на механизм и выберите python.exe в папке сценариев virtualenv.

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

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