I have a project in Pycharm organized as follows:
-- Sources
|--__init__.py
|--Calculators
|--__init__.py
|--Filters.py
|--Controllers
|--__init__.py
|--FiltersController.py
|--Viewers
|--__init__.py
|--DataVisualization.py
|--Models
|--__init__.py
|--Data
All of my __init__.py, except for the one right above Sources are blank files. I am receiving a lot of warnings of the kind:
Cannot find reference 'xxx' in __init__.py
For example, my FiltersController.py has this piece of code:
import numpy.random as npr
bootstrap = npr.choice(image_base.data[max(0, x-2):x+3, max(0, y-2):y+3].flatten(), size=(3, 3), replace=True)
And I get this warning:
Cannot find reference 'choice' in __init__.py
I'm googling wondering what does this mean and what should I do to code properly in Python.
Thank you in advance.
This question is related to
python
reference
coding-style
pycharm
Did you forget to add the init.py in your package?
You should first take a look at this. This explains what happens when you import a package. For convenience:
The import statement uses the following convention: if a package’s
__init__.py
code defines a list named__all__
, it is taken to be the list of module names that should be imported whenfrom package import *
is encountered. It is up to the package author to keep this list up-to-date when a new version of the package is released. Package authors may also decide not to support it, if they don’t see a use for importing * from their package.
So PyCharm respects this by showing a warning message, so that the author can decide which of the modules get imported when * from the package is imported. Thus this seems to be useful feature of PyCharm (and in no way can it be called a bug, I presume). You can easily remove this warning by adding the names of the modules to be imported when your package is imported in the __all__
variable which is list, like this
__init__.py
from . import MyModule1, MyModule2, MyModule3
__all__ = [MyModule1, MyModule2, MyModule3]
After you add this, you can ctrl+click
on these module names used in any other part of your project to directly jump to the declaration, which I often find very useful.
I have solved this problem in my pycharm in a bit different way.
Go to settings -> Project Interpreter and then click on the base package there.
You will see a page like this
After that when your package is installed then you should see the package is colored blue rather than white.
And the unresolved reference is also gone too.
I know this is old, but Google sent me here so I guess others will come too like me.
The answer on 2018 is the selected one here: Pycharm: "unresolved reference" error on the IDE when opening a working project
Just be aware that you can only add one Content Root
but you can add several Source Folders
. No need to touch __init__.py
files.
You can mark source directory as a source root like so:
Make sure you didn't by mistake changed the file type of __init__.py
files. If, for example, you changed their type to "Text" (instead of "Python"), PyCharm won't analyze the file for Python code. In that case, you may notice that the file icon for __init__.py
files is different from other Python files.
To fix, in Settings > Editor > File Types
, in the "Recognized File Types" list click on "Text" and in the "File name patterns" list remove __init__.py
.
Source: Stackoverflow.com