Пилинт кода 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>'
Наконец прикинул:
Прежде всего, выберите правильный путь к Python. (В случае виртуальной среды это будет venv/bin/python). Вы можете сделать это, нажав
Убедитесь, что ваш путь к pylint совпадает с путем python, который вы выбрали на шаге 1. (Вы можете открыть VS Code из активированного venv с терминала, чтобы он автоматически выполнял эти два шага)
Самый важный шаг: добавьте пустой файл __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 с двух уровней глубже. Эти три вещи должны быть синхронизированы, чтобы все работало.
Вот что я бы порекомендовал:
В Visual Studio Code откройте каталог, содержащий вашу основную программу Python. (Это может быть или не быть верхним уровнем каталога проекта.)
Выберите меню "Терминал"> "Новый терминал" и создайте виртуальную среду прямо в том же каталоге.
python3 -m venv env
Установите Pylint в виртуальной среде. Если вы выберете какой-либо файл Python на боковой панели, Visual Studio Code предложит вам это сделать. С другой стороны,
source env/bin/activate
затемpip install pylint
,В синей нижней панели окна редактора выберите интерпретатор 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
Перейдите в Настройки рабочего пространства: ⌘ / Ctrl⇧P→
Workspace Settings
.
Добавьте туда следующую строку конфигурации:
"python.envFile": "/Users/jackwootton/.vscode/workspace.env",
Окно перезагрузки.
Это решение лучше, чем @Jack, потому что оно не изменяет глобальную переменную для всей системы, только для рабочего пространства вашего проекта.
В моем случае пакеты были установлены в глобальный путь установки Python, а не в venv, хотя во время установки у меня была активирована виртуальная среда.
Я мог видеть это, когда переключился на базовую среду (щелчком в нижнем левом поле состояния выбранного интерпретатора) и увидел, что пакет можно импортировать.
Я мог решить эту проблему, только удалив venv и установив его снова.