PyCharm muestra un error de referencias no resueltas para un código válido

279

Estoy usando PyCharm para trabajar en un proyecto. El proyecto se abre y configura con un intérprete, y puede ejecutarse con éxito. Las rutas remotas del intérprete se asignan correctamente. Esta parece ser la configuración correcta, pero PyCharm está resaltando mi código válido con errores de "referencia no resuelta", incluso para las funciones integradas de Python. ¿Por qué no parecen detectarse, aunque se ejecuta el código? ¿Hay alguna forma de hacer que PyCharm los reconozca correctamente?


Esta instancia específica del problema es con un intérprete remoto, pero el problema también aparece en los intérpretes locales.

James McCalden
fuente
Tengo el mismo problema y lo resolví. Aquí la solución .
Hace

Respuestas:

445

Archivo | Invalidar cachés ... y reiniciar PyCharm ayuda.

Dmitry Trofimov
fuente
3
Esta es la única forma de trabajar en PyCharm 4.0.x en mi caso. El hecho es que si algo se arruinó y no se actualiza (a veces incluso muestra el mismo intérprete repetido varias veces en la lista), tendrá que eliminar los archivos manualmente ... Incluso tuve que eliminar las carpetas .idea una vez .
danius
10
Esto es muy pesado. ¿No hay forma de recuperar la antigua opción de "ruta de actualización" en PyCharm 4.5?
Chris Withers
66
Es realmente molesto que tal IDE no se encargue de una operación tan simple.
Eduardo Pignatelli
3
Funciona momentáneamente. Después de unos minutos vuelvo a tener la misma advertencia
Aseem
La respuesta aceptada es de peso pesado y muy probablemente no aborde el quid del problema. Aquí hay información directamente de la boca de los caballos: JetBrains - PyCharm Content Root "PyCharm usa las raíces fuente como punto de partida para resolver las importaciones" Tuve el problema exactamente como en el título porque en algunos proyectos necesito usar un árbol de archivos donde las fuentes están en una subcarpeta, PyCharm se confunde sobre las importaciones. Matar el caché podría ayudar por un momento, pero no es el enfoque correcto. Marque el directorio de fuentes como root y todo está bien.
predmod hace
133

La respuesta de Dmitry no funcionó para mí.

Obtuve el mío trabajando en Intérpretes del proyecto, seleccionando la pestaña "Rutas" y presionando el botón Actualizar en ese submenú. Se rellena automáticamente con algo llamado "esqueletos de pitón".

editar : captura de pantalla usando PyCharm 3.4.1 (está bastante bien oculto)

ingrese la descripción de la imagen aquí

Kelorek
fuente
66
¿Dónde está "Python Interpreters"? ¿Te refieres a "intérpretes de proyectos"? Estoy usando Linux y tampoco pude encontrar la pestaña Rutas.
Baskaya
1
En PyCharm 3.4 en OSX, es un icono que parece un pequeño árbol de carpetas y no dice "Rutas".
Daniel Bushman
12
Para cualquiera aún confundido (en PyCharm 3.4.1):Settings > Project Settings > Project Interpreter > Project Interpreters (gear button > more) > --Select the interpreter-- > Interpreter Paths (Directory Tree button on the right) > Reload List of Paths (Blue refresh-like button)
raphaeltm
55
No existe tal botón de actualización en PyCharm 4, solo los signos más y menos.
dtheodor
3
@Sarah En PyCharm 4.0.4, en la ventana "Rutas de intérprete", no tengo el botón "recargar lista de rutas" (icono de actualización azul inferior). Además, no veo ninguna ruta en la lista y los botones más y menos están deshabilitados.
Henrik Heimbuerger
70

Hay muchas soluciones para esto, algunas más convenientes que otras, y no siempre funcionan.

Esto es todo lo que puedes probar, pasando de 'rápido' a 'molesto':

  • Haga File-> Invalidate Caches / Restarty reinicie PyCharm.
    • También puede hacer esto después de cualquiera de los métodos a continuación, solo para estar seguro.
  • Primero, verifique qué intérprete está ejecutando: Run-> Edit Configurations-> Configuration-> Python Interpreter.
  • Actualice los caminos de su intérprete:
    • File -> Settings
    • Project: [name]-> Project Interpreter-> 'Intérprete de proyecto': icono de engranaje ->More...
    • Haga clic en el botón 'Mostrar rutas' (parte inferior)
    • Haga clic en el botón 'Actualizar' (parte inferior)
  • Retire el intérprete y agréguelo nuevamente:
    • File -> Settings
    • Project: [name]-> Project Interpreter-> 'Intérprete de proyecto': icono de engranaje ->More...
    • Haga clic en el botón 'Eliminar'
    • Haga clic en el botón 'Agregar' y vuelva a agregar su intérprete
  • Eliminar tus preferencias de proyecto
    • Eliminar la .ideacarpeta de tu proyecto
    • Cerrar y volver a abrir PyCharm
    • Abre tu proyecto desde cero
  • Elimine sus preferencias de usuario de PyCharm (pero primero haga una copia de seguridad de ellas).
    • ~/.PyCharm50 en Mac
    • %homepath%/.PyCharm50 en Windows
  • Cambie a otro intérprete, luego regrese nuevamente al que desea.
  • Cree un nuevo entorno virtual y cambie al intérprete de esos entornos.
  • Cambie a otro intérprete por completo, no vuelva a cambiar.
florisla
fuente
He tenido este problema durante el tiempo que he estado usando PyCharm y todavía no pueden solucionarlo de manera confiable. Es bueno que hayas cubierto la mayor parte del trabajo de una forma u otra y termina solucionando el problema. Es curioso cómo vuelvo a esta respuesta de vez en cuando para descubrir qué trabajo olvidé intentar.
Alex
3
Trabajé en esta lista y eliminar / volver a agregar el intérprete funcionó para mí. ¡Gracias!
Mark
16

En mi caso fue la estructura de directorios. Mi proyecto se ve así:

+---dir_A
    +---dir_B
        +app
        |
        \-run.py

Así que haga clic derecho en dir_b> "marcar directorio como"> "raíz del proyecto"

Shoham
fuente
2
La pregunta no era que PyCharm no reconoce el código del proyecto . No reconoce los métodos integrados estándar de Python.
florisla
Solucioné mi problema en PyCharm 2019.3.3 en MacOS
samisnotinsane
11

Me encuentro quitando y volviendo a agregar el intérprete remoto para solucionar este problema cuando invalidar cachés o actualizar rutas no funciona.

Utilizo vagabundo y de vez en cuando si agrego una nueva VM a mi configuración multi-vm, el puerto reenviado cambia y esto parece confundir a PyCharm cuando intenta usar el puerto incorrecto para SSH. Cambiar el puerto no parece ayudar a las referencias rotas.

Thomas Farvour
fuente
10

Si ninguna de las otras soluciones funciona para usted, intente (realizar una copia de seguridad) y elimine su carpeta ~ / .PyCharm40, luego vuelva a abrir PyCharm. Esto matará todas tus preferencias también.

En Mac desea eliminar ~ / Library / Caches / Pycharm40 y ~ / Library / Preferences / PyCharm40.

Y en Windows: C: \ Users \ $ USER.PyCharm40.

Imran
fuente
10

Probado con PyCharm 4.0.6 (OSX 10.10.3) siguiendo estos pasos:

  1. Haz clic en el menú de PyCharm.
  2. Seleccionar intérprete de proyecto.
  3. Seleccione el icono de engranaje.
  4. Seleccione el botón Más.
  5. Seleccione Project Interpreter en el que se encuentra.
  6. Seleccione el botón Árbol de directorios.
  7. Seleccione Volver a cargar la lista de rutas.

¡Problema resuelto!

siripan
fuente
10

muy fácil

solo tiene que marcar su directorio raíz como: RAÍZ DE FUENTE (rojo) y sus aplicaciones: RAÍZ EXCLUIDA (azul),

entonces la referencia no resuelta desaparecerá.

  • ingrese la descripción de la imagen aquísi usa PyChram pro, lo hará automáticamente.
mujad
fuente
55
Tengo pycharm pro y no lo hizo por mí, pero después de que marqué manualmente las carpetas correctamente funcionó
Jose
Sí, esa es la respuesta correcta y no una opción nuclear en la que el efecto secundario ayuda por un momento pero no aborda cómo piensa la herramienta jetbrains ("matar el caché", ¿verdad ... y cuando se reconstruye? "Matarlo de nuevo ! "). El título, que era exactamente un problema en mis proyectos, donde la raíz del proyecto no es necesariamente la raíz de las fuentes y las importaciones no lo entienden. Aquí hay información directamente de la boca de los caballos jetbrains.com/help/pycharm/content-root.html "¡PyCharm usa las raíces de origen como punto de partida para resolver las importaciones"!
predmod hace
6

Lamento responder esta pregunta, sin embargo, tengo una actualización importante que hacer.

Es posible que también desee revertir su intérprete de proyecto a Python 2.7.6 si está utilizando una versión diferente a la anterior. Esto funcionó para mí en mi instalación de Ubuntu de PyCharm 4.04 professional después de que ninguna de las otras recomendaciones resolvió mi problema.

Fairlight Evony
fuente
1
El cambio al intérprete local de Python 2 y luego nuevamente a su intérprete remoto de Python 3 también me arregló esto.
James Fletcher
Esto también funciona en PyCharm 5 professional. Ninguna de las otras soluciones en esta publicación me ha funcionado. Entré Settings -> "Project Interpreters", hice clic en el engranaje, y luego "More...". Elija el intérprete de python predeterminado ( /usr/bin/python2.7en mi caso), presione "Ok"y "Apply". Luego regresé y elegí el virtualenv real que quería usar. "Ok"y de "Apply"nuevo, y está arreglado.
Josh
Del mismo modo FileNotFoundErrores una cosa de Python-3 solamente. Después de configurar el intérprete correcto en File-Settings-Project-Interpreter y Run-Edit-Configurations, uno de ellos hizo que el error desapareciera.
Bob Stein
3

Puede intentar cerrar Pycharm, eliminar la .ideacarpeta de su proyecto, luego iniciar Pycharm nuevamente y volver a crear el proyecto. Esto funcionó para mí, mientras que invalidar el caché no.

Jason McVetta
fuente
2

Finalmente conseguí que esto funcionara después de que ninguna de las soluciones propuestas funcionó para mí. Estaba jugando con un proyecto de django rest framework y estaba usando un virtualenv que había configurado con él. Pude arreglar Pycharm marcando la carpeta raíz como la raíz de las fuentes, pero luego el servidor de django arrojó excepciones de resolución. Entonces, uno funcionaría cuando el otro no, y viceversa.

Finalmente, solo tuve que marcar la subcarpeta como la raíz de las fuentes en pycharm. Entonces mi estructura era así

-playground
     -env
     -playground

Esa segunda carpeta de juegos es la que tuve que marcar como la raíz de las fuentes para que todo funcione como se esperaba. Eso no presentó ningún problema para mi escenario, por lo que fue una solución viable.

Solo pensé en compartir en caso de que alguien más pueda usarlo.

usuario2233949
fuente
2

También podría ser un problema de la versión de Python. Tuve que elegir el correcto para que funcione. ingrese la descripción de la imagen aquí

Shehaaz
fuente
2

Si desea ignorar solo algunos errores de "referencia no resuelta", también puede decirle PyCharm explícitamente colocando esto delante de su clase / método / función:

# noinspection PyUnresolvedReferences
flix
fuente
1

Cerré todos los demás proyectos y ejecuté mi proyecto requerido de forma aislada en Pycharm. Creé un virtualenv separado de pycharm y agregué todos los módulos necesarios usando pip. Agregué este entorno virtual en el intérprete del proyecto. Esto resolvió mi problema.

Waqar Detho
fuente
1

Geeze qué pesadilla, mi amalgama de diferentes respuestas de StackOVerflow:

  1. Cambie al intérprete local /usr/bin/pythonX.X y solicite
  2. Ver rutas como la respuesta anterior
  3. Encuentra esqueletos camino. El mío fue (/home/tim/Desktop/pycharm-community-2016.2.3/helpers/python-skeletons)
  4. Vuelva al intérprete virt y agregue la ruta de esqueletos manualmente si no aparece automáticamente.
Tim
fuente
1

¡Ninguna de las soluciones anteriores funcionó para mí!
Si está utilizando un entorno virtual para su proyecto, asegúrese de aplicar el python.exearchivo que está dentro de su directorio de entorno virtual como intérprete para el proyecto, (Alt + Ctrl + Shift + S) esto resolvió el problema para mí.

Ali Sherafat
fuente
1

En mi caso, el error de inspección aparece debido a un caso muy específico de código python. Una función mínima que contiene dos funciones numpy y dos accesos a la lista hace que la inspección de mi código dé este tipo de errores.

La eliminación de la línea 'd = 0' en el siguiente ejemplo da un error de referencia no resuelto como se esperaba, pero la lectura no hace que el error desaparezca para el inspector de código. Todavía puedo ejecutar el código sin problemas después.

import numpy as np
def strange(S, T, U, V):
    d = 0
    print min(np.abs(S[d]), np.abs(T[d]), U[d], V[d])

El borrado de cachés y la recarga de la lista de rutas no funciona. Solo funciona alterar el código con uno de los siguientes parches de ejemplo:

  • Otra ordenación de los parámetros 'min': esquemáticamente SUTV pero no STUV o TSUV
  • Usando un método en lugar de la función: S [d] .abs () en lugar de np.abs (S [d])
  • Usando la función incorporada abs ()
  • Agregar un número a un parámetro de elección: U [d] + 0.
Wannes Goethals
fuente
1

Ninguna de las respuestas resolvió mi problema.

Lo que me hizo fue cambiar de entorno y volver al mismo entorno. File->Settings->Project interpreter

Estoy usando entornos conda.

Kristjan Kica
fuente
1

Me funcionó con una acción mucho más simple :


File > Settings > Project > Project Interpreter 
> Select "No interpreter" in the "Project interpreter" list 
> Apply > Set your python interpreter again > Click Apply

Beneficio: Pycharm está actualizando esqueletos y todo está bien.

Alexander Iljushkin
fuente
0

Si está utilizando vagrantel error puede ser causado por un intérprete de Python incorrecto. En nuestro vagrantestamos utilizando, pyenvasí que tuve que cambiar el Python Interpreter pathcamino de /usr/bin/pythona/home/vagrant/.pyenv/versions/vagrant/bin/python ingrese la descripción de la imagen aquí

Daniil Mashkin
fuente
0

Tengo un proyecto donde un archivo src/importa otro archivo en el mismo directorio. Para que PyCharm reconozca, tuve que ir a Archivo> Configuración> Proyecto> Estructura del proyecto> seleccionarsrc carpeta y hacer clic en "Marcar como: Fuentes"

Desde https://www.jetbrains.com/help/pycharm/configuring-folders-within-a-content-root.html

Las raíces de origen contienen los archivos y recursos de origen reales. PyCharm usa las raíces de origen como punto de partida para resolver importaciones

qwr
fuente
0

Mi problema es que PyCharm no resuelve Flask-WTF . He intentado volver a instalar y luego instalar o invalidar la memoria caché y reiniciar PyCharm, pero todavía no funciona.

Luego se me ocurrió esta solución y funciona perfectamente para mí.

  1. Abra Project Interpreter con Ctrl + Alt + S (Windows) y luego haga clic en Instalar (+) un nuevo paquete.

ingrese la descripción de la imagen aquí

  1. Escriba el paquete que PyCharm no resuelve y luego haga clic en Instalar paquete . Luego haga clic en Aceptar .

ingrese la descripción de la imagen aquí

Ahora verá que su biblioteca ha sido resuelta.

Hien Quang Le
fuente
-1

¿Estás usando virtualenv?

si es así, debe notificar a PyCharm por cada cambio en la ubicación del python.exe deseado (simplemente ./activate no es suficiente para PyCharm)

Asegúrese de que Pycharm apunte al interpetor y los paquetes correctos: Archivo -> Configuración -> Proyecto -> Intérprete de proyecto. Haga clic en el engranaje y elija python.exe en la carpeta Scripts de virtualenv

ingrese la descripción de la imagen aquí

Bar Horing
fuente