I created a venv using python3.6 on my mac os in this folder
/Users/kim/Documents/Apps/PythonApps/python36-miros-a3
I ran a pip install pylint
after I activated the virtual env
My workspace is in /Users/kim/Documents/Apps/WebApps/miros-a3
Inside my vscode workspace, I have the following Workspace settings
{
"folders": [
{
"path": "."
}
],
"settings": {
"python.pythonPath": "/Users/kim/Documents/Apps/PythonApps/python36-miros-a3/bin/python3.6",
"python.venvPath": "/Users/kim/Documents/Apps/PythonApps"
}
}
I have tried setting a custom path for the pylint and also changing the venvpath.
The pylint kept complaining about the import statement saying it does not exist.
As you can see, they are in the same folder, and I can definitely execute my python files.
What can I do to avoid these kind of false positive import errors?
I have also tried the following:
- go to commandline turn on the virtual env and then type
code
to activate the vscode as recommended here https://code.visualstudio.com/docs/setup/mac - also tried this https://donjayamanne.github.io/pythonVSCodeDocs/docs/troubleshooting_linting/
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:
or, maybe better
Generate .pylintrc file. From integrated terminal with venv activated run:
then open the generated file and uncomment the init-hook= part to be:
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:
See this answer by Anthony Sottile.
To me,
pylint
is correct in flagging this error herethe top level module is
database
(it contains an__init__.py
file)Your import should look like (fully absolute)
or (explicit relative) (yes! the
.
before the module name is intentional)My follow-up guess is that you're currently invoking your script as
python ./database/main.py ...
which is putting./database
at the beginning ofsys.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 usingpython -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.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.