Cannot find reference 'xxx' in __init__.py

PythonPycharm

Python Problem Overview


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.

Python Solutions


Solution 1 - Python

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:

  • put the caret over the erroring text ('choice', from your example above)
  • Bring up the intention menu (alt-enter by default, mine is set to alt-backspace)
  • hit the right arrow to open the submenu, and select the relevant action

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.

Solution 2 - Python

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

Solution 3 - Python

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: https://stackoverflow.com/questions/20479696/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.

Solution 4 - Python

You can mark source directory as a source root like so:

  • Right-click on source directory
  • Mark Directory As --> Source Root
  • File --> Invalidate Caches / Restart... -> Invalidate and Restart

Solution 5 - Python

Well I managed to really outdo myself here.... I didnt have the .py extension at the end of the file I was trying to import

Solution 6 - Python

I copied cv2.pyd from the cv2 folder and pasted it inside the site-packages folder and this fixed the problem.

Reference Images:

Image-1

Image-2

Solution 7 - Python

This problem may also occur if you add several separate projects to one project in PyCharm and mark a different project as a source route.

Check chosen source routes. It helped me solve the problem with ctrl+click.

Solution 8 - Python

It happened to me in PyCharm when having in the same window 2 attached projects with:

  • one project using a Python interpreter with newer Python version (e.g. 3.6)
  • another project using a Python interpreter with older Python version (e.g. 2.7)

I had to detach one of the projects to resolve the reference that was pointing to the wrong Python version.

Solution 9 - Python

This happened to me with the websockets library, but seems to be a more general problem. Example:Cannot find reference 'exceptions' in 'init.py init.py'

This worked for me: from websockets import exceptions

Solution 10 - Python

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.

Solution 11 - Python

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

problemGuide

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionpcecconView Question on Stackoverflow
Solution 1 - PythonMr. BView Answer on Stackoverflow
Solution 2 - PythonSнаđошƒаӽView Answer on Stackoverflow
Solution 3 - PythonedilioView Answer on Stackoverflow
Solution 4 - PythonabsinView Answer on Stackoverflow
Solution 5 - PythonLucas CrostarosaView Answer on Stackoverflow
Solution 6 - PythonBurak-AtakView Answer on Stackoverflow
Solution 7 - PythonMaximus BesmanView Answer on Stackoverflow
Solution 8 - PythonJulienmView Answer on Stackoverflow
Solution 9 - PythonShukrulloView Answer on Stackoverflow
Solution 10 - PythonXavierView Answer on Stackoverflow
Solution 11 - PythonAbdullah NomanView Answer on Stackoverflow