pylint false false E0401 ошибки импорта в vscode при использовании venv - PullRequest
0 голосов
/ 29 июня 2018

Я создал venv, используя python3.6 на моем Mac OS в этой папке /Users/kim/Documents/Apps/PythonApps/python36-miros-a3

Я запустил pip install pylint после того, как активировал виртуальную среду

Мое рабочее пространство в /Users/kim/Documents/Apps/WebApps/miros-a3

Внутри моего рабочего пространства vscode у меня есть следующие настройки рабочего пространства

{
    "folders": [
        {
            "path": "."
        }
    ],
    "settings": {
        "python.pythonPath": "/Users/kim/Documents/Apps/PythonApps/python36-miros-a3/bin/python3.6",
        "python.venvPath": "/Users/kim/Documents/Apps/PythonApps"
    }
}

Я попытался установить собственный путь для пиллинта, а также изменить venvpath.

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

enter image description here

enter image description here

Как вы можете видеть, они находятся в одной папке, и я определенно могу выполнить свои файлы Python.

Что можно сделать, чтобы избежать ложных срабатываний при импорте?

Я также попробовал следующее:

  1. перейдите в командную строку, включите виртуальную среду, а затем введите code, чтобы активировать vscode, как рекомендовано здесь https://code.visualstudio.com/docs/setup/mac
  2. тоже пробовал это https://donjayamanne.github.io/pythonVSCodeDocs/docs/troubleshooting_linting/

Ответы [ 3 ]

0 голосов
/ 09 июля 2018

Для меня pylint правильно отметить эту ошибку здесь

модуль верхнего уровня - database (содержит файл __init__.py)

Ваш импорт должен выглядеть (полностью)

from database.database_dispatcher import ...

или (явно относительный) (да! . перед именем модуля является преднамеренным)

from .database_dispatcher import ...

Мое дальнейшее предположение заключается в том, что вы в настоящее время вызываете свой скрипт как python ./database/main.py ..., который ставит ./database в начале sys.path, так что может показаться , что ваш импорт работает правильно - однако это обходит структуру вашего модуля. Вы должны вызывать ваш скрипт, используя python -m database.main ....

Обратите внимание, что неявный относительный импорт был удален в python 3.x - хотя эта (imo) бородавка сценария sys.path вставка остается.

0 голосов
/ 24 июля 2019

Только мои 0,02 доллара за то, как я исправил это в моей ситуации.

Моя проблема была полностью связана с тем, что Pylint был установлен по всему миру, и кодировкой в ​​venv. vscode пытался использовать глобально установленный pylint, который просто не знал о зависимостях, которые я установил в моем Python venv. Этот ответ решил мою проблему. Здесь указано здесь , в котором объясняется, как настроить vscode для запуска с использованием venv для моего проекта. Как только я это сделал, vscode сразу же выдал предупреждение, в котором говорилось, что у меня не установлено средство для рисования, и предложил установить его. Как только это было сделано, мои ложные срабатывания исчезли.

0 голосов
/ 09 июля 2018

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

  1. Установите этот параметр в настройках рабочего пространства или папки:

    "python.linting.pylintArgs": [
        "--init-hook",
        "import sys; sys.path.append('<path to folder your module is in>')"
    ]
    

    или, может быть, лучше

  2. Создать файл .pylintrc. От встроенного терминала с активированным вентилем:

    pylint --generate-rcfile > .pylintrc 
    

    затем откройте сгенерированный файл и раскомментируйте часть init-hook = , чтобы она была:

    init-hook='import sys; sys.path.append("<path to folder you module is in>")'
    

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

  3. Узнав о настройках Pylint, сделайте это правильно:

    from database.database_dispatcher import ...
    

    См. этот ответ Энтони Соттиль.

...