#python #tensorflow #visual-studio-code #pylint #pylance
#python #тензорный поток #visual-studio-code #pylint #пиланс
Вопрос:
Сводка
У меня есть импорт python, который работает при запуске из терминала VS Code, но редактор VS Code выдает предупреждения. Кроме того, «Перейти к определению» не работает.
Проблема
Я создал контейнер docker из изображения tensorflow/tensorflow:1.15.2-py3
, затем подключился к нему, используя расширение VS Code «Remote- Containers». Затем я создал следующий файл в контейнере.
main.py:
import tensorflow.compat.v1 as tf
print(tf.__version__)
Это нормально работает в терминале VS Code, но редактор и панель проблем выдают мне unresolved import 'tensorflow.compat'
предупреждение. Также «Перейти к определению» не работает tf.__version__
.
Я использую несколько расширений, но я считаю, что соответствующими являются расширение Microsoft Python (установленное в контейнере), а также расширение Remote — Containers, а теперь и расширение Pylance (установленное в контейнере).
То, что я пробовал
Я пробовал это с настройкой по умолчанию pylint
, а затем также после установки pylance
с аналогичными результатами. Я также видел несколько документов о подобных проблемах, но они были связаны с настройкой правильного расположения исходной папки для модулей, которые были частью проекта. Напротив, мой код в моем проекте, похоже, отлично работает с импортом / переходом к определению. Это внешние библиотеки, которые, похоже, не работают.
Кроме того, ради этого минимального примера я подключился к контейнеру как root, поэтому я предполагаю, что это не проблема с повышенными разрешениями.
Я также попытался отключить все расширения, кроме следующих, но получил те же результаты:
- Удаленные контейнеры (локальные)
- Удаленный — WSL (локальный)
- Python (в контейнере)
- Jupyter (в контейнере, по какой-то причине требуемом Python)
Все вышеуказанные расширения относятся к последним версиям.
Я также повозился с настройками python.autocomplete.extraPaths
, но я не уверен, каков правильный путь. Также кажется неправильным добавлять библиотеки к пути, которые установлены в глобальной установке python, тем более, что я не использую виртуальную среду (она находится в контейнере docker и все такое).
Вопрос
Как мне исправить VS Code, чтобы он распознал этот импорт, и я мог использовать «Перейти к определению» для изучения этих функций / классов tensorflow / etc?
Комментарии:
1. Обычно подобные проблемы можно решить с помощью расширений, или иногда это побочный эффект использования неправильного. Вы искали расширение, которое обрабатывает тип рабочего процесса, который вы пытаетесь выполнить? Вполне возможно, что установленные вами intellisense (ы) не могут понять конфигурацию, с которой вы работаете.
2. Я использую расширение Python от Microsoft, расширение Remote — Containers, расширение Pylance и другие. Я не уверен, что вы подразумеваете под «подобными проблемами, которые можно решить с помощью расширений». Я считаю, что эти расширения, которые у меня есть, должны решить проблему, но у меня возникли проблемы с их правильной настройкой.
3. В том, что я сказал, есть важное предостережение: у вас могут быть установлены неправильные. Проверьте, какие расширения вы установили, проверьте, нет ли каких-либо несовместимых. Если вы сомневаетесь, удалите то, что у вас есть, и выборочно переустановите то, что вам нужно. Это не то, что кто-либо может помочь вам устранить.
Ответ №1:
tldr;
TensorFlow определяет некоторые из своих модулей таким образом, что pylint и pylance не могут распознать. Эти ошибки не обязательно указывают на неправильную настройку.
Чтобы исправить:
- pylint: предупреждения pylint безопасно игнорируются.
- Intellisense: лучший известный мне на данный момент способ исправить Intellisense — это заменить импорт модулями, которые они сглаживают (найдены путем импорта псевдонима в repl при
x
последующем запускеhelp(x)
). Поскольку целью псевдонима в моем случае является внутреннее имя, вы, вероятно, не захотите проверять эти изменения в системе управления версиями. Не идеально.
Подробные сведения
Что касается линтинга: похоже, что tensorflow определяет свои модули таким образом, что инструменты не могут понять. Кроме того, похоже, что пакет является каким-то псевдонимом для другого пакета. Например:
import tensorflow.compat.v1 as tf
tf.estimator.RunConfig()
Приведенный выше код выдает предупреждение pylint и прерывает intellisense. Но если вы вручную импортируете вышеуказанное в REPL и запустите help(tf)
, он покажет вам приведенный ниже пакет, который вы можете использовать вместо него:
import tensorflow_core._api.v1.compat.v1 as tf
tf.estimator.RunConfig()
Этот второй пример не вызывает предупреждения pylint. Также функции Intellisense (перейти к определению, Ctrl Click и т.д.) работают со вторым примером.
Однако, основываясь на _api
, похоже, что второе имя пакета является внутренним пространством имен, поэтому я предполагаю, что, вероятно, лучше использовать это внутреннее имя только для локальной отладки.
Подтверждение / Билеты
- pylint: я нашел сообщение о том, что у pylint возникли проблемы с несколькими импортами tensorflow, которые выглядят связанными.
- Intellisense: я открыл заявку с помощью pylance.
Ответ №2:
Так что для меня я пытался
import pandas as pd
но я получил сообщение об ошибке
"pd" is not accessedPylance (module) pd
Итак, что я сделал, так это перезагрузил расширение Python IntelliSense (Pylance), и это решило мою проблему.
Ответ №3:
У меня была такая же проблема, но со всеми видами пакетов. Мое решение состояло в том, чтобы перейти к настройкам VSCode, выполнить поиск и "python.analysis.extraPaths"
добавить путь к вашим сайтам-пакетам.
В моем случае я добавил C:CodePython39Libsite-packages
, и теперь он работает нормально.