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.
You should first take a look at this. This explains what happens when you import a package. For convenience:
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
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.
This is a bug in pycharm. PyCharm seems to be expecting the referenced module to be included in an
__all__ = []
statement.For proper coding etiquette, should you include the
__all__
statement from your modules? ..this is actually the question we hear young Spock answering while he was being tested, to which he responded: "It is morally praiseworthy but not morally obligatory."To get around it, you can simply disable that
(extremely non-critical)(highly useful) inspection globally, or suppress it for the specific function or statement.To do so:
PyCharm has its share of small bugs like this, but in my opinion its benefits far outweigh its drawbacks. If you'd like to try another good IDE, there's also Spyder/Spyderlib.
I know this is quite a bit after you asked your question, but I hope this helps (you, or someone else).
Edited: Originally, I thought that this was specific to checking
__all__
, but it looks like it's the more general 'Unresolved References' check, which can be very useful. It's probably best to use statement-level disabling of the feature, either by using the menu as mentioned above, or by specifying# noinspection PyUnresolvedReferences
on the line preceding the statement.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 severalSource Folders
. No need to touch init.py filesDid you forget to add the init.py in your package?