No se puede encontrar la referencia ‘xxx’ en __init__.py – Python / Pycharm

Tengo un proyecto en Pycharm organizado de la siguiente manera:

-- Sources |--__init__.py |--Calculators |--__init__.py |--Filters.py |--Controllers |--__init__.py |--FiltersController.py |--Viewers |--__init__.py |--DataVisualization.py |--Models |--__init__.py |--Data 

Todos mis __init__.py, excepto el de la derecha, las fonts son archivos en blanco. Recibo muchas advertencias de este tipo:

No se puede encontrar la referencia ‘xxx’ en __init__.py

Por ejemplo, mi FiltersController .py tiene este código:

 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) 

Y me sale esta advertencia:

No se puede encontrar la ‘opción’ de referencia en __init__.py

Busco en Google preguntándome qué significa esto y qué debo hacer para codificar correctamente en Python.

Gracias de antemano.

Este es un error en pycharm. PyCharm parece estar esperando que el módulo de referencia se incluya en una __all__ = [] .

Para una etiqueta de encoding adecuada, ¿debe incluir la statement __all__ de sus módulos? … esta es en realidad la pregunta que oímos responder al joven Spock mientras estaba siendo evaluado, a lo que respondió: “Es moralmente loable pero no moralmente obligatorio”.

Para evitarlo, simplemente puede deshabilitar esa inspección (extremadamente no crítica) (muy útil) a nivel mundial, o suprimirla para la función o statement específica.

Para hacerlo

  • Coloque el cursor sobre el texto de error (‘elección’, de su ejemplo anterior)
  • Muestra el menú de intención (alt-enter por defecto, el mío está configurado como alt-backspace)
  • presione la flecha derecha para abrir el submenú y seleccione la acción relevante

PyCharm tiene su cuota de pequeños errores como este, pero en mi opinión, sus beneficios superan con creces sus inconvenientes. Si desea probar otro IDE bueno, también hay Spyder / Spyderlib.

Sé que esto es bastante después de que hayas hecho tu pregunta, pero espero que esto te ayude (a ti oa alguien más).

Editado: Originalmente, pensé que esto era específico para verificar __all__ , pero parece que es el chequeo más general de ‘Referencias no resueltas’, que puede ser muy útil. Probablemente sea mejor usar la desactivación a nivel de la statement de la función, ya sea utilizando el menú como se mencionó anteriormente o especificando # noinspection PyUnresolvedReferences en la línea que precede a la statement.

Primero deberías echar un vistazo a esto . Esto explica lo que sucede cuando importas un paquete. Por conveniencia:

La statement de importación usa la siguiente convención: si el código __init__.py un paquete define una lista llamada __all__ , se considera la lista de nombres de módulos que deben importarse cuando se encuentra from package import * . Depende del autor del paquete mantener esta lista actualizada cuando se lance una nueva versión del paquete. Los autores de paquetes también pueden decidir no admitirlo, si no ven un uso para importar * de su paquete.

Por lo tanto, PyCharm respeta esto al mostrar un mensaje de advertencia, de modo que el autor pueda decidir cuál de los módulos se importará cuando * se importe del paquete. Por lo tanto, esta parece ser una característica útil de PyCharm (y de ninguna manera puede llamarse un error, supongo). Puede eliminar fácilmente esta advertencia agregando los nombres de los módulos que se importarán cuando su paquete se importe en la variable __all__ , que es la lista, como esta

__init__.py

 from . import MyModule1, MyModule2, MyModule3 __all__ = [MyModule1, MyModule2, MyModule3] 

Después de agregar esto, puede ctrl+click en los nombres de estos módulos utilizados en cualquier otra parte de su proyecto para saltar directamente a la statement, que a menudo me parece muy útil.

Sé que esto es antiguo, pero Google me envió aquí, así que supongo que otros vendrán como yo.

La respuesta en 2018 es la seleccionada aquí Pycharm: error de “referencia no resuelta” en el IDE al abrir un proyecto de trabajo

Tenga en cuenta que solo puede agregar una Content Root pero puede agregar varias Source Folders . No es necesario tocar los archivos .py de inicio

¿Olvidaste agregar el init .py en tu paquete?

He resuelto este problema en mi pycharm de una manera un poco diferente.

Vaya a configuración -> Intérprete de proyecto y luego haga clic en el paquete base allí.

Verás una página como esta.

guía de problemas

Después de eso, cuando el paquete esté instalado, debería ver que el paquete está coloreado de azul en lugar de blanco.

Y la referencia no resuelta también se ha ido también.