Пилинт кода Visual Studio: невозможно импортировать protorpc

Я использую Pylint в Visual Studio Code для разработки API-интерфейса Cloud Endpoint для Google App Engine (GAE) в Python. Я не могу устранить ошибку ворса. Я не знаю, что является причиной ошибки, но, по- видимому, Pylint не может найти protorpc библиотека?

Рекомендуемое исправление в Устранении неполадок Linting - настройка параметров рабочего пространства для указания на полностью определенный исполняемый файл Python. Я сделал это, но ошибка ворса остается.

protorpc сам установлен для:

~/google-cloud-sdk/platform/google_appengine/lib/protorpc-1.0/protorpc

... и это содержит remote.py модуль, который не может быть импортирован:

__init__.py             generate_python.py      protojson.py            transport.py
definition.py           google_imports.py       protourlencode.py       util.py
descriptor.py           message_types.py        registry.py             webapp
generate.py             messages.py             remote.py               wsgi
generate_proto.py       protobuf.py             static

Я добавил этот путь к $PYTHONPATH (вместе с кухонной раковиной):

export GOOGLE_CLOUD_SDK=~/google-cloud-sdk
export APPENGINE_PATH=$GOOGLE_CLOUD_SDK/platform/google_appengine

export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/lib
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/lib/googlecloudsdk
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/lib/googlecloudsdk/api_lib
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/platform/google_appengine/lib
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/platform/google_appengine/lib/protorpc-1.0/protorpc

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

Использование сторонних библиотек гласит:

Среда выполнения Python в стандартной среде включает стандартную библиотеку Python, библиотеки App Engine и несколько связанных сторонних пакетов.

Из-за этого я предположил, что "библиотеки App Engine" включают protorpc, но я не уверен. Кроме того, для добавления библиотеки фреймворков облачных конечных точек в пример API требуется только установка конечных точек google в каталог lib приложения:

pip install -t lib google-endpoints --extra-index-url=https://gapi-pypi.appspot.com/admin/nurpc-dev --ignore-installed

Суть в том, что я не думаю, что я что-то не установил, и я не думаю, что мне чего-то не хватает в каталоге lib моего (веб) приложения.

21 ответ

Решение

Я решил это, добавив библиотеку protorpc в $PYTHONPATH переменная окружения. В частности, я указал на библиотеку, установленную в моем каталоге App Engine:

export PYTHONPATH=$PYTHONPATH:/Users/jackwootton/google-cloud-sdk/platform/google_appengine/lib/protorpc-1.0

После добавления этого ~/.bash_profile, перезагрузив компьютер и код Visual Studio, ошибки импорта исчезли.

Для полноты я не изменял никаких настроек кода Visual Studio, относящихся к Python. Полный ~/.bash_profile файл:

export PATH=/Users/jackwootton/protoc3/bin:$PATH

export PYTHONPATH=/Users/jackwootton/google-cloud-sdk/platform/google_appengine

export PYTHONPATH=$PYTHONPATH:/Users/jackwootton/google-cloud-sdk/platform/google_appengine/lib/protorpc-1.0

# The next line updates PATH for the Google Cloud SDK.
if [ -f '/Users/jackwootton/google-cloud-sdk/path.bash.inc' ]; then source '/Users/jackwootton/google-cloud-sdk/path.bash.inc'; fi

# The next line enables shell command completion for gcloud.
if [ -f '/Users/jackwootton/google-cloud-sdk/completion.bash.inc' ]; then source '/Users/jackwootton/google-cloud-sdk/completion.bash.inc'; fi

Изменение пути к библиотеке работало для меня. Удары Ctrl + Shift + P и печатать python interpreter и выбрав один из доступных показанных. Один из них был знаком (как указано на virtualenv, который раньше работал нормально), и он работал. Обратите внимание на версию Python, с которой вы работаете, 2.7 или 3.x и выберите соответственно

Я столкнулся с той же проблемой (VS Code). Решено методом ниже

1) Выберите команду переводчика в палитре команд (Ctrl + Shift + P)

2) Поиск "Выберите переводчика"

3) Выберите установленный каталог python

Ссылка: - https://code.visualstudio.com/docs/python/environments

Откройте файл настроек вашего кода Visual Studio (settings.json) и добавьте путь к "python.autoComplete.extraPaths" список.

"python.autoComplete.extraPaths": [
    "~/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2",
    "~/google-cloud-sdk/platform/google_appengine",
    "~/google-cloud-sdk/lib",
    "~/google-cloud-sdk/platform/google_appengine/lib/endpoints-1.0",
    "~/google-cloud-sdk/platform/google_appengine/lib/protorpc-1.0"
],

Для вашего случая добавьте следующий код в vscode settings.json,

"python.linting.pylintArgs": [
    "--init-hook='import sys; sys.path.append(\"~/google-cloud-sdk/platform/google_appengine/lib\")'"
]

Для тех, у кого проблемы с пип-пакетами, вы можете пойти с

"python.linting.pylintArgs": [
    "--init-hook='import sys; sys.path.append(\"/usr/local/lib/python3.7/dist-packages\")'"
]

Вы должны заменить python3.7 выше с вашей версией Python.

Потрачены часы, пытаясь исправить ошибку при импорте локальных модулей. Выполнение кода было в порядке, но pylint показал:

    Unable to import '<module>'

Наконец прикинул:

  1. Прежде всего, выберите правильный путь к Python. (В случае виртуальной среды это будет venv/bin/python). Вы можете сделать это, нажав

  2. Убедитесь, что ваш путь к pylint совпадает с путем python, который вы выбрали на шаге 1. (Вы можете открыть VS Code из активированного venv с терминала, чтобы он автоматически выполнял эти два шага)

  3. Самый важный шаг: добавьте пустой файл __init__.py в папку, содержащую файл вашего модуля. Хотя python3 не требует этого файла для импорта модулей, я думаю, что pylint по-прежнему требует его для линтинга.

Перезапустите VS Code, ошибки должны исчезнуть!

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

Таким образом, я просто изменил pythonPath на python3 (по умолчанию: python):

"python.pythonPath": "python3"

Я переустановил зависимости (включая Pylint!!!) с

pip3 install <package> --user

... и после перезапуска кода, все выглядело хорошо.

HTH Кай

Самое простое решение - создать .env файл в корне вашего проекта с этим содержимым:

      PYTHONPATH=.

Тебе не нужно __init__.pyфайлы. Он работает, даже если ваш код находится в src dir и модульные тесты в testsподдиры. Это помогло pylint а также pytest найти все модули.

Для получения дополнительной информации см. Https://code.visualstudio.com/docs/python/environments#_environment-variable-definitions-file.

Я все еще получал эти ошибки даже после подтверждения того, что правильный python а также pylint использовались из моего виртуального окружения.

В конце концов я понял, что в коде Visual Studio я был А), открывая каталог моего проекта, то есть Б), где находилась моя виртуальная среда Python, но я был С), запуская основную программу Python с двух уровней глубже. Эти три вещи должны быть синхронизированы, чтобы все работало.

Вот что я бы порекомендовал:

  1. В Visual Studio Code откройте каталог, содержащий вашу основную программу Python. (Это может быть или не быть верхним уровнем каталога проекта.)

  2. Выберите меню "Терминал"> "Новый терминал" и создайте виртуальную среду прямо в том же каталоге.

    python3 -m venv env
    
  3. Установите Pylint в виртуальной среде. Если вы выберете какой-либо файл Python на боковой панели, Visual Studio Code предложит вам это сделать. С другой стороны, source env/bin/activate затем pip install pylint,

  4. В синей нижней панели окна редактора выберите интерпретатор Python env/bin/python, Или перейдите в "Настройки" и установите "Python: Python Path". Это устанавливает python.pythonPath в Settings.json.

Настройка Visual Studio по умолчанию должна совпадать с путем интерпретатора.

Изменить настройки кода VS по умолчанию:windows: Файл> Настройки> Настройки

{
    "python.pythonPath": "C:\\Users\\Anaconda3\\pythonw.exe",
    "workbench.startupEditor": "newUntitledFile"
}

Найдите правильного переводчика: windows: Ctrl+Shift+P-> выберите переводчика:

путь этого интерпретатора должен совпадать с версией, над которой вы работаете.

Сначала я проверю python3 путь, где он живет

А затем в настройках VS Code просто добавьте этот путь, например:

"python.pythonPath": "/usr/local/bin/python3"

Перейдите в files-> preference-> settings-> и найдите pylint, и у нас есть несколько вариантов, и снимите флажок с опции "линтовать ли файлы python" из "python Linting:Enabled".

В моем случае я попробовал flake8, bandit, не получилось, в конце концов я удалил расширение под названием python (pylance), и все заработало отлично.

Я считаю приведенные выше решения очень полезными. Особенно объяснение виртуальной среды Python от jrc.

В моем случае я использовал Docker и редактировал "локальные" файлы (а не непосредственно внутри докера). Итак, я установил расширение удаленной разработки от Microsoft.

ext install ms-vscode-remote.vscode-remote-extensionpack

Более подробную информацию можно найти на https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack

Должен сказать, сначала было непросто поиграть. У меня сработало...
1. запуск докера
2. В vscode, Remote-container: прикрепить к запущенному контейнеру
3. Добавление папки/code/<path-to-code-folder> от корня машины до vscode

а затем установка расширения python + pylint

Другое решение могло бы генерировать pylintrc в местоположении проекта с помощью команды:

      pylint --generate-rcfile

а затем обновить ключ init-hook= с помощью:

      import sys; sys.path.append("your_project_location")

У меня была такая же проблема с pyodbc, у меня было две версии python на моем Ubuntu (python3.8 и python3.9), проблема заключалась в том, что пакет установлен в местоположении python3.8, но мой интерпретатор был для python3.9. Я установил интерпретатор python3.8 в палитре команд, и он исправлен.

Я получил ту же ошибку в моем vscode, где у меня была установлена ​​библиотека и код работал при запуске с терминала, но по какой-то причине pylint vscode не смог выбрать установленный пакет, возвращающий печально известную ошибку:

Невозможно импортировать pylint 'someLibrary.someModule' (ошибка импорта)

Проблема может возникнуть из-за нескольких установок Python. В основном вы установили библиотеку / пакет на одном, а vscode pylint установлен и запущен из другой установки. Например, в macOS и многих дистрибутивах Linux по умолчанию установлен Python2, и при установке Python3 это может вызвать путаницу. Также в Windows диспетчер пакетов Chocolatey может вызвать беспорядок, и вы получите несколько установок Python. Чтобы выяснить это, если вы работаете на машине *nix (например, macOS, GNU/Linux, BSD...), используйтеwhich команда, а если вы работаете в Windows, используйте whereкоманда, чтобы найти установленные интерпретаторы Python. Например, на машинах *nix:

which python3

и в Windows

where python

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

python -c "import someLibrary"

если вы получите сообщение об ошибке, вам следует установить его, например, pip:

pip install someLibrary

затем нажмите vscode, P если вы используете Mac и CtrlShiftP другие операционные системы. Затем введите-выберите>python: Select Interpreterвариант и выберите тот, у которого установлена ​​библиотека. В этот момент vscode может попросить вас снова установить pyling, и вы просто продолжаете.

Я устраняю эту ошибку следующим образом:

1: сначала напишите этот код в терминале:

...$ which python3
/usr/bin/python3

2: Затем:

"python.pythonPath": "/users/bin/python",

сделанный.

pylint запускается в терминале vscode, а его вывод передается в редактор. Поэтому настройки среды терминала должны совпадать с настройками в командной строке вне vscode. В частности, в settings.json:

      "terminal.integrated.env.linux": {
        "PYTHONPATH": "/path/to/library/files/you/want/pylint/to/FINALLY/EXPLETIVE/FIND"
    },

Другие решения не работают для меня (несколько рабочих пространств)

Создавать ~/.vscode/workspace.env со следующим содержанием

      PYTHONPATH=$PYTHONPATH:/Users/jackwootton/protoc3/bin

Перейдите в Настройки рабочего пространства: ⌘ / CtrlPWorkspace Settings.

Добавьте туда следующую строку конфигурации:

      "python.envFile": "/Users/jackwootton/.vscode/workspace.env",

Окно перезагрузки.


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

В моем случае пакеты были установлены в глобальный путь установки Python, а не в venv, хотя во время установки у меня была активирована виртуальная среда.

Я мог видеть это, когда переключился на базовую среду (щелчком в нижнем левом поле состояния выбранного интерпретатора) и увидел, что пакет можно импортировать.

Я мог решить эту проблему, только удалив venv и установив его снова.

Другие вопросы по тегам