I have a directory structure
+-- simulate.py
+-- src
¦ +-- networkAlgorithm.py
¦ +-- ...
And I can access the network module with sys.path.insert()
.
import sys
import os.path
sys.path.insert(0, "./src")
from networkAlgorithm import *
However, pycharm complains that it cannot access the module. How can I teach pycham to resolve the reference?
Many a times what happens is that the plugin is not installed. e.g.
If you are developing a django project and you do not have django plugin installed in pyCharm, it says error 'unresolved reference'. Refer: https://www.jetbrains.com/pycharm/help/resolving-references.html
For my case :
Directory0
+-- Directory1
¦ +-- file1.py
+-- Directory2
¦ +-- file2.py
Into file1, I have :
from Directory2 import file2
which trows an "unresolved reference Directory2".
I resolved it by:
AND
It is silly but if I don't do the second action, the error still appears and can make you think that you didn't resolve the issue by marking the parent directory as Source Root.
Normally, $PYTHONPATH is used to teach python interpreter to find necessary modules. PyCharm needs to add the path in Preference.
Done in PyCharm 2019.3.1 Right-click on your src folder -> "Mark Directory as" -> Click-on "Excluded" and your src folder should be blue.
The easiest way to fix it is by doing the following in your pyCharm software:
Click on: File > Settings > (Project: your project name) > Project Interpreter >
then click on the "+" icon on the right side to search for the package you want and install it.
Enjoy coding !!!
I tried everything here twice and even more. I finally solved it doing something I hadn't seen anywhere online. If you go to Settings>Editor>File Types
there is an 'Ignore Files and folders
' line at the bottom. In my case, I was ignoring 'venv'
, which is what I always name my virtual environments. So I removed venv;
from the list of directories to ignore and VOILA!! I was FINALLY able to fix this problem. Literally all of my import problems were fixed for the project.
BTW, I had installed each and every package using PyCharm, and not through a terminal. (Meaning, by going to Settings>Interpreter...
). I had invalidated cache, changed 'Source Root', restarted PyCharm, refreshed my interpreters paths, changed interpreters, deleted my venv... I tried everything. This finally worked. Obviously there are multiple problems going on here with different people, so this may not work for you, but it's definitely worth a shot if nothing else has worked, and easy to reverse if it doesn't.
In newer versions of pycharm u can do simply by right clicking on the directory or python package from which you want to import a file, then click on 'Mark Directory As' -> 'Sources Root'
After testing all workarounds, i suggest you to take a look at Settings -> Project -> project dependencies
and re-arrange them.
After following the accepted answer, doing the following solved it for me:
File
? Settings
? Project <your directory/project>
? Project Dependencies
Chose the directory/project where your file that has unresolved imports resides and check the box to tell Pycharm that that project depends on your other project.
My folder hierarcy is slightly different from the one in the question. Mine is like this
+-- MyDirectory
¦ +-- simulate.py
+-- src
¦ +-- networkAlgorithm.py
¦ +-- ...
Telling Pycharm that src depends on MyDirectory
solved the issue for me!
Please check if you are using the right interpreter that you are supposed to. I was getting error "unresolved reference 'django' " to solve this I changed Project Interpreter (Changed Python 3 to Python 2.7) from project settings: Select Project, go to File -> Settings -> Project: -> Project Interpreter -> Brows and Select correct version or Interpreter (e.g /usr/bin/python2.7).
I was also using a virtual environment like Dan above, however I was able to add an interpreter in the existing environment, therefore not needing to inherit global site packages and therefore undo what a virtual environment is trying to achieve.
This worked for me: Top Menu -> File -> Invalidate Caches/Restart
your problem will be solved
__init__.py
file in src
folder src
folder as a source rootPYTHONPATH
(see above)Although all the answers are really helpful, there's one tiny piece of information that should be explained explicitly:
.py
file and create an __init__.py
(empty) file there.Why this helps is because this file is required to make Python treat the directory as containing packages. Cheers!
Generally, this is a missing package problem, just place the caret at the unresolved reference and press Alt+Enter
to reveal the options, then you should know how to solve it.
Pycharm uses venv. In the venv's console you should install the packages explicitly or go in settings -> project interpreter -> add interpreter -> inherit global site-packages
.
If anyone is still looking at this, the accepted answer still works for PyCharm 2016.3 when I tried it. The UI might have changed, but the options are still the same.
ie. Right click on your root folder --> 'Mark Directory As' --> Source Root
Source: Stackoverflow.com