I am getting a unresolved import 'sys' linter warning in my VSCode Python program. I have other imports (json, numpy, etc.) that I don't have any issue with. I am using all the latest versions of Python, VSCode, and the extensions. It doesn't matter which linter I use, they all give me the same error. However, when I run the file it runs with no problem. Why is this happening and how can I fix it?
EDIT:
At the bottom in the PROBLEMS pane it says unresolved import 'sys' Python(unresolved-import)
Here is what pops up in VSCode when I put my cursor over sys:
(module) "/root/.vscode-server/extensions/ms-pyright.pyright-1.0.57/typeshed-fallback/stdlib/3/sys.pyi"
unresolved import 'sys'Python(unresolved-import)
Peek Problem
No quick fixes available```
Based on your description my suspicion is the warning is coming from the Microsoft language server (unfortunately you didn't provide the exact problem output which specifies what tool is providing the warning). If it is the language server then it's fixed in the beta release and thus will get fixed in stable eventually.
You may be able to find a solution in an answer like this one on setting up your Python Path in VS Code.
Another solution is to add your desired python interpreter installation folder to the PYTHONPATH environment variable.
That said, it does appear when you do not have a virtual environment setup (venv) this is a bug that will be fixed, per Brett's answer.
Related
I am coding in PyCharm and to set up the environment I use poetry, python version 3.10
Everything was working ok, but starting from one moment of time I got problem with module imports.
But the problem does not relate to the import of the whole module but to the import of class or function from module.
You can see as an example that BaseSettings from pydantic is underlined with red wavy line and Pycharm says that BaseSettings is unresolved reference.
I tried
to invalidate cache in Pycharm
install, uninstall the module (poetry add/remove)
change the environment and return back
marked folder as a source root (assume it is irrelevant but anyway)
but unfortunately nothing helped
aiohttp.client.py
aiohttp.init.py
I found the out what was the reason for this strange behaviour. It was the problem of PyCharm IDE. PyCharm stopped recognising init.py as python files that produced import errors. Actually I do not know why this happened since I did not changed any settings or updated PyCharm.
The solution was to manually add pattern "init.py" to python files mask in Settings -> Editor ->File types -> Python (please see screenshot in the attachment)
The Summary
I have a python import that works when run from the VS Code terminal, but that VS Code's editor is giving warnings about. Also, "Go to Definition" doesn't work.
The Problem
I have created a docker container from the image tensorflow/tensorflow:1.15.2-py3, then attach to it using VS Code's "Remote- Containers" extension. Then I've created the following file in the container.
main.py:
import tensorflow.compat.v1 as tf
print(tf.__version__)
This runs fine in the VS Code terminal, but the Editor and the Problems pane both give me an unresolved import 'tensorflow.compat' warning. Also "Go to Definition" doesn't work on tf.__version__.
I'm using several extensions but I believe the relevant ones are the Microsoft Python extension (installed in the container), as well as the Remote - Containers extension, and now the Pylance extension (installed in the container).
The Things I've Tried
I've tried this with the default pylint, and then also after installing pylance with similar results. I've also seen some docs about similar issues, but they were related to setting the correct source folder location for modules that were part of a project. In contrast, my code within my project seems to work fine with imports/go-to-definition. It's external libraries that don't seem to work.
Also, for the sake of this minimal example, I've attached to the container as root, so I am guessing it's not an issue of elevated permissions.
I've also tried disabling all the extensions except the following, but got the same results:
Remote - Containers (local)
Remote - WSL (local)
Python (on container)
Jupyter (on container, required by Python for some reason)
All the extensions above are on the latest versions.
I've also fiddled around with setting python.autocomplete.extraPaths, but I'm not sure what the right path is. It also seems like the wrong thing to have to add libraries to the path that are installed in the global python installation, especially since I'm not using a virtual environment (it being in a docker container and all).
The Question
How do I fix VS Code so that it recognizes this import and I can use "Go to Definition" to explore these tensorflow functions/classes/etc?
tldr;
TensorFlow defines some of its modules in a way that pylint & pylance aren't able to recognize. These errors don't necessarily indicate an incorrect setup.
To Fix:
pylint: The pylint warnings are safely ignored.
Intellisense: The best way I know of at the moment to fix Intellisense is to replace the imports with the modules they are aliasing (found by importing alias in a repl as x then running help(x)). Because the target of the alias in my case is an internal name, you probably don't want to check in these changes to source control. Not ideal.
Details
Regarding the linting: It seems that tensorflow defines its modules in a way that the tools can't understand. Also, it appears that the package is an alias of some kind to another package. For example:
import tensorflow.compat.v1 as tf
tf.estimator.RunConfig()
The above code gives the pylint warning and breaks intellisense. But if you manually import the above in a REPL and run help(tf), it shows you the below package, which you can use instead:
import tensorflow_core._api.v1.compat.v1 as tf
tf.estimator.RunConfig()
This second example does not cause the pylint warning. Also the Intellisense features (Go to definition, Ctrl+Click, etc) work with this second example.
However, based on the _api, it looks like that second package name is an internal namespace, so I'm guessing it is probably best to only use this internal name for local debugging.
Confirmation/Tickets
pylint: I've found a ticket about pylint having issues with a couple tensorflow imports that looks related.
Intellisense: I've opened a ticket with pylance.
So for me I was trying to
import pandas as pd
but I got the error
"pd" is not accessedPylance (module) pd
SO what I did was reload the extension Python IntelliSense(Pylance) and that solved my issue.
I had the same problem but with all kinds of packages.
My solution was to go to the VSCode settings and search for "python.analysis.extraPaths", and add the path to your site-packages.
In my case, I added C:\Code\Python39\Lib\site-packages, and now it's working fine.
What, usually, solves the pylance issues for me is pointing my Python interpreter to the virtualenv one.
Open the command palette Ctrl + Shift + P
Type: Python: Select Interpreter
It will show a list of all the python Interpreters it actually detects:
Select Enter interpreter path
Type in the path to your local venv/bin folder or click find to navigate using the file explorer.
Your path should look something like:
venv/bin/python3.9
i changed "import tensorflow as tf" to "from tensorflow import compat as tf"
it ll even work for tf.gfile.Gfile()
I use VS Code to write and test python scripts.
Is it possible to make the editor aware of imported modules
to avoid problems listed like
Module 'numpy' has no 'divmod' member
You would update the Python interpreter settings according to where modules have been installed. (bottom right of VS Code)
The IDE being used isn't really relevant because you could invoke /path/to/bin/python, start a REPL, import the same module, and get the same error
Regarding, "numpy has no ... member", based on searching, that is a PyLint issue, not an import issue
How do I get PyLint to recognize numpy members?
I'm not quite sure this question belong to StackOverflow and not other SE website, but since it's python related I thought it might fit.
Recently, I started getting error in my IDE (details on my IDE below) - I get an error "cannot find reference 'path' in 'os.py'"
Looking into os.py, I realize that os.path is just an alias for posixpath.py (on Linux) or ntpath.py (on Windows).
Now, no change has been made to my python installation, and when running scripts that import os.path (or from it), they all run fine, so there is no actual error, just annoying warning in my IDE. I tried changing the project interpreter in the IDE and it didn't work. I also tried running from terminal with the said IDE, and it worked fine.
Could it be a bug in PyCharm?
I looked online and couldn't find bug report or anyone struggling with the same problem.
PyCharm build details:
PyCharm 2018.1 (Community Edition)
Build #PC-181.4203.547, built on March 26, 2018
JRE: 1.8.0_152-release-1136-b20 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Linux 4.7.0-0.bpo.1-amd64
It's a bug that was fixed in 2018.1.1 https://youtrack.jetbrains.com/issue/PY-28764
I suppose it is a bug (or behavior) introduced in the very last version of PyCharm. Indeed, it has been happening to me since the last update I recently installed.
However, I temporary ignored these unresolved references in PyCharm to avoid the annoying and misleading warnings.
To do so, if you are importing os.path this way (e.g.):
from os.path import join
Go to PyCharm preferences -> Editor -> Inspections
Then, look for "Unresolved references" under "Python" and add the following entries:
os.path
join
Hope this helps,
Giuliano
Really silly one going on here...
I need to use this bit of code...
from sentry.client.handlers import SentryHandler
if SentryHandler not in map(lambda x: x.__class__, logger.handlers):
logger.addHandler(SentryHandler())
I just can't get it to import in Eclipse/Pydev. I get
Unresolved import: SentryHandler
Unused import: SentryHandler
If I do
from sentry.client.handlers import *
it imports without error in Eclipse but I can't access the SentryHandler class.
The code definitely exists in site-packages directory. I have other packages in the site-packages directory that work perfectly.
The code actually works. It is just an Eclipse issue.
I also have an issue with one other module:
import httplib2
It works also but Eclipse gives me an error importing. I am obviously missing a bit of Eclipse / Pydev knowledge.
Any ideas how to get it working.
I had the same problem. Here's what worked for me:
Go back into the Pydev configuration: window > preferences > pydev > Interpreter - (Python/Jython/IronPython)
I'm using the Python interpreter.
Although my PYTHONPATH was setup properly to include dist-packages, I still needed to hit apply (or re-apply in my case) for it to reprocess the cache. After hitting apply, the error from importing Sentry went away.
This step is covered in the Pydev manual for the interpreter configuration page:
http://pydev.org/manual_101_interpreter.html#what-if-i-add-something-new-in-my-system-pythonpath-after-configuring-it
Eclipse does not do runtime checking. If the handlers module does not contain an explicit definition of the SentryHandler class and imports it from another module (i.e. as a convenience) then Pydev's Parser cannot find it. I suspect this is what is happening to you however i would have to check sentry's code to confirm.