pylint false positive E0401 import errors in vscode while using venv
Solution 1:
Pylint has some quirks. In this case it doesn't know where to find your module because it's in subdirectory of your venv path. To solve this:
-
Put this setting in your workspace or folder settings:
"python.linting.pylintArgs": [ "--init-hook", "import sys; sys.path.append('<path to folder your module is in>')" ]
or, maybe better
-
Generate .pylintrc file. From integrated terminal with venv activated run:
pylint --generate-rcfile > .pylintrc
then open the generated file and uncomment the init-hook= part to be:
init-hook='import sys; sys.path.append("<path to folder you module is in>")'
Read the .pylintrc and tweak settings if you wish. In both cases path should point to your 'database' folder.
-
After learning about pylint settings, do it the right way:
from database.database_dispatcher import ...
See this answer by Anthony Sottile.
Solution 2:
To me, pylint
is correct in flagging this error here
the top level module is database
(it contains an __init__.py
file)
Your import should look like (fully absolute)
from database.database_dispatcher import ...
or (explicit relative) (yes! the .
before the module name is intentional)
from .database_dispatcher import ...
My follow-up guess is that you're currently invoking your script as python ./database/main.py ...
which is putting ./database
at the beginning of sys.path
so it would appear that your imports are working correctly -- this is side-stepping your module structure however. You should be invoking your script using python -m database.main ...
instead.
Note that implicit relative imports were removed in python 3.x -- though this (imo) wart of script sys.path
insertion remains.
Solution 3:
Just my $0.02 on how I fixed it in my situation.
My problem was totally related to having pylint installed globally, and coding in a venv. vscode was trying to use the globally installed pylint which simply was not aware of dependencies I installed in my Python venv. This answer solved my problem. It points here which explained how to configure vscode to run using the venv for my project. Once i did that vscode immediately threw a warning saying I had no linting tool installed and prompted me to install one. Once that was done my linting false-positives went away.