Problema de referencia sin resolver en PyCharm


373

Tengo una estructura de directorio

├── simulate.py
├── src
   ├── networkAlgorithm.py
   ├── ...

Y puedo acceder al módulo de red con sys.path.insert().

import sys
import os.path
sys.path.insert(0, "./src")
from networkAlgorithm import *

Sin embargo, pycharm se queja de que no puede acceder al módulo. ¿Cómo puedo enseñar pycham para resolver la referencia?

ingrese la descripción de la imagen aquí


44
¿La carpeta src tiene __init__.pyarchivo?
Puffin GDI

@Puffin GDI: No, no lo hace.
prosseek

55
@PuffinGDI ¿Las carpetas src necesitan este archivo init .py?
Jack Chi

Sí, para que Python identifique los paquetes: stackoverflow.com/questions/42094723/…
rnoodle

Cambié el nombre del nombre de la clase y sigo trabajando en ello. Cuando presioné ejecutar, hubo este error, olvidé por completo el cambio de nombre e intenté buscar sugerencias de pycharm durante la importación. ¡Maldita sea, las sugerencias distinguen entre mayúsculas y minúsculas! - ¡Nuevo en python!
Vignesh Paramasivam

Respuestas:


817

Agregarlo manualmente como lo ha hecho es una forma de hacerlo, pero hay un método más simple, y es simplemente decirle a pycharm que desea agregar la srccarpeta como raíz de origen y luego agregar la raíz de origen a su python camino.

De esta manera, no tiene que codificar las cosas en la configuración de su intérprete:

  • Agregar srccomo raíz de contenido de origen:

                            ingrese la descripción de la imagen aquí

  • Luego, asegúrese de agregar fuentes adicionales a su PYTHONPATH:

ingrese la descripción de la imagen aquí

  • Ahora se resolverán las importaciones:

                      ingrese la descripción de la imagen aquí

De esta manera, puede agregar lo que quiera como raíz raíz, y las cosas simplemente funcionarán. Si no marcados como una raíz de origen, sin embargo, que va a obtener un error:

                                  ingrese la descripción de la imagen aquí

Después de todo esto, no olvides reiniciar. En el menú PyCharm, seleccione: Archivo -> Invalidar cachés / reiniciar


17
Esto también funciona si está utilizando el complemento Python con IntelliJ.
Rob Mayoff

13
Esta solución funciona El problema es que cuando otro programador recupera el código de svn, tiene que hacer la misma configuración nuevamente para deshacerse del mensaje de error de "referencia no resuelta".
Ben Lin

2
@GamesBrainiac, la solución es que el IDE puede analizar "sys.path.insert (0," ./src ")" y agregarlo a PYTHONPATH para este archivo específico, luego proporcionar un análisis de sintaxis adecuado.
Ben Lin

2
También debe asegurarse de que la ruta raíz del contenido sea correcta. En pycharm 5 puede encontrar esto en Preferencias -> Proyecto -> Estructura del proyecto.
lps

1
Curiosamente, los subdirectorios no se tienen en cuenta. Por ejemplo, si está debajo src, tenemos una viewscarpeta dentro de la cual tengo myview.py, todavía recibo un error de referencia sin resolver cuando intento from src.views.myview import <my_function>...
SexyBeast

49
  1. verificar el __init__.pyarchivo en la srccarpeta
  2. agregue la srccarpeta como raíz fuente
  3. Luego, asegúrese de agregar fuentes adicionales a su PYTHONPATH(ver arriba)
  4. en el menú de PyCharm, seleccione: Archivo -> Invalidar cachés / reiniciar

11
Este último paso fue lo único que faltaba en mi solución. La respuesta aceptada podría agregarle esto.
aimbire

sin el último paso mencionado aquí, la respuesta aceptada no funciona. La respuesta aceptada también debe agregar este paso /
santhosh kumar

23

Si alguien todavía está mirando esto, la respuesta aceptada todavía funciona para PyCharm 2016.3 cuando lo probé. La interfaz de usuario puede haber cambiado, pero las opciones siguen siendo las mismas.

es decir. Haga clic derecho en su carpeta raíz -> 'Marcar directorio como' -> Origen raíz


1
Tantas respuestas complejas en esta discusión. La solución presentada aquí me funcionó muy fácilmente.

16

Después de probar todas las soluciones alternativas, le sugiero que eche un vistazo Settings -> Project -> project dependenciesy las reorganice.

preferencia de pycharm


Esto funciona perfectamente para mi. He instalado pygameallí y no más problema de referencia sin resolver!
Michal Przybylowicz


5

En general, este es un problema de paquete que falta, simplemente coloque el cursor en la referencia no resuelta y presione Alt+Enterpara revelar las opciones, luego debe saber cómo resolverlo.


4

Después de seguir la respuesta aceptada, hacer lo siguiente lo resolvió para mí:

FileSettingsProject <your directory/project>Project Dependencies

Elija el directorio / proyecto donde reside su archivo que tiene importaciones no resueltas y marque la casilla para decirle a Pycharm que ese proyecto depende de su otro proyecto.

La jerarquía de mi carpeta es ligeramente diferente de la de la pregunta. El mío es así

├── MyDirectory  
     └── simulate.py  
├── src  
     ├── networkAlgorithm.py  
     ├── ...

¡Decirle a Pycharm que src depende de MyDirectoryresolver el problema para mí!


4

Aunque todas las respuestas son realmente útiles, hay una pequeña información que debe explicarse explícitamente:

  • Esencialmente, un proyecto con múltiples directorios jerárquicos funciona como un paquete con algunos atributos.
  • Para importar clases creadas localmente personalizadas, debemos navegar al directorio que contiene el .pyarchivo y crear un __init__.pyarchivo (vacío) allí.

Por qué esto ayuda es porque este archivo es necesario para hacer que Python trate el directorio como que contiene paquetes. ¡Salud!


3

Instalar a través de PyCharm (funciona con Community Edition). Abre y Settings > Project > Project Interpreterluego haz clic en el ícono verde + en la captura de pantalla a continuación. En el segundo diálogo que se abre, ingrese el nombre del paquete y haga clic en el botón 'Instalar paquete'.

ingrese la descripción de la imagen aquí



1

Compruebe si está utilizando el intérprete correcto que se supone que debe usar. Recibí el error "referencia no resuelta 'django'" para resolver esto. Cambié el Intérprete del Proyecto (Cambié Python 3 a Python 2.7) desde la configuración del proyecto: Seleccione Proyecto, vaya a Archivo -> Configuración -> Proyecto: -> Intérprete de Proyecto -> Cejas y Seleccione la versión correcta o el Intérprete (p. ej. /usr/bin/python2.7).


1

En mi caso, el problema era que estaba usando el Virtual environmentque no tenía acceso a los paquetes globales del sitio. Por lo tanto, el intérprete no estaba al tanto de los paquetes recién instalados.

Para resolver el problema, solo edite o vuelva a crear su intérprete virtual y marque la Inherit global site-packagesopción.

ingrese la descripción de la imagen aquí


¿Esto no tiene consecuencias indeseables y derrota una razón para usar un entorno virtual? Es decir, si lleva ese entorno a algún lugar y se instalan esos paquetes globales del sitio, entonces está en problemas. Es lo que pensaba.
theStud54


0

Hecho en PyCharm 2019.3.1 Haga clic derecho en su carpeta src -> "Marcar directorio como" -> Haga clic en "Excluido" y su carpeta src debería ser azul.


0

Para mí, agregar la venvruta de paquetes de sitio de virtualenv ( ) a las rutas del intérprete funciona. ¡Finalmente!

ingrese la descripción de la imagen aquí


-1

Pycharm usa venv. En la consola de venv, debe instalar los paquetes explícitamente o entrar settings -> project interpreter -> add interpreter -> inherit global site-packages.


-1

En las versiones más recientes de pycharm, puede hacerlo simplemente haciendo clic con el botón derecho en el directorio o paquete de Python desde el que desea importar un archivo, luego haga clic en 'Marcar directorio como' -> 'Rooteo de fuentes'


-1

La forma más fácil de solucionarlo es haciendo lo siguiente en su software pyCharm:

Haga clic en: Archivo> Configuración> (Proyecto: el nombre de su proyecto)> Intérprete de proyecto>

luego haga clic en el icono "+" en el lado derecho para buscar el paquete que desea e instalarlo.

Disfruta codificando !!!


1
Bienvenido a Stack Overflow, y gracias por tu respuesta. Si bien esto puede ser correcto, en el futuro, evite publicar imágenes o enlaces a otros sitios sin contexto o más detalles. El enlace puede dejar de funcionar en algún momento, haciendo que esta respuesta sea menos útil para otros usuarios.
CyberJacob

@CyberJacob Muchas gracias, y muchas gracias por tu consejo, he editado la respuesta eliminando la imagen y agregando texto en su lugar.
zaid.mohammed
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.