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 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.