Problema di riferimento irrisolto in PyCharm


373

Ho una struttura di directory

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

E posso accedere al modulo di rete con sys.path.insert().

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

Tuttavia, pycharm si lamenta di non poter accedere al modulo. Come posso insegnare a Pycham a risolvere il riferimento?

inserisci qui la descrizione dell'immagine


4
La cartella src ha __init__.pyfile?
Puffin GDI

@Puffin GDI: No, non lo è.
Prosseek

5
@PuffinGDI Le cartelle src necessitano di questo file init .py?
Jack Chi,

Sì perché Python per identificare i pacchetti: stackoverflow.com/questions/42094723/...
rnoodle

Ho rinominato il nome della classe e continuo a lavorarci su. Quando ho eseguito la corsa, si è verificato questo errore, ho completamente dimenticato di rinominare e ho cercato suggerimenti Pycharm durante l'importazione. Accidenti, i suggerimenti fanno distinzione tra maiuscole e minuscole! - Nuovo su Python !!
Vignesh Paramasivam,

Risposte:


817

L'aggiunta manuale come hai fatto è davvero un modo per farlo, ma c'è un metodo più semplice, e cioè semplicemente dicendo a Pycharm che vuoi aggiungere la srccartella come radice di origine, e quindi aggiungendo la radice di fonti al tuo Python sentiero.

In questo modo, non è necessario codificare le cose nelle impostazioni dell'interprete:

  • Aggiungi srccome radice del contenuto di origine:

                            inserisci qui la descrizione dell'immagine

  • Quindi assicurati di aggiungere fonti aggiuntive al tuo PYTHONPATH:

inserisci qui la descrizione dell'immagine

  • Ora le importazioni saranno risolte:

                      inserisci qui la descrizione dell'immagine

In questo modo, puoi aggiungere quello che vuoi come radice di origine e le cose funzioneranno semplicemente. Se non marcato come una radice fonte tuttavia, si avrà un errore:

                                  inserisci qui la descrizione dell'immagine

Dopo tutto questo non dimenticare di riavviare. Nel menu PyCharm selezionare: File -> Cache / Riavvio non validi


17
Questo funziona anche se stai usando il plugin Python con IntelliJ.
Rob Mayoff,

13
Questa soluzione funziona. Il problema è che quando un altro programmatore recupera il codice da svn, deve ripetere le stesse impostazioni per eliminare la richiesta di errore "riferimento non risolto".
Ben Lin,

2
@GamesBrainiac, la soluzione è che l'IDE può analizzare "sys.path.insert (0," ./src ")" aggiungerlo in PYTHONPATH per questo file specifico, quindi fornire un'analisi della sintassi corretta.
Ben Lin,

2
È inoltre necessario assicurarsi che il percorso della radice del contenuto sia corretto. In pycharm 5 puoi trovarlo in Preferenze -> Progetto -> Struttura del progetto.
lps

1
Stranamente, le sottodirectory non vengono prese in considerazione. Ad esempio, se sotto src, abbiamo una viewscartella all'interno della quale ho myview.py, ricevo ancora un errore di riferimento irrisolto quando from src.views.myview import <my_function>
provo

49
  1. controlla il __init__.pyfile nella srccartella
  2. aggiungere la srccartella come radice di origine
  3. Quindi assicurati di aggiungere fonti aggiuntive al tuo PYTHONPATH(vedi sopra)
  4. nel menu PyCharm selezionare: File -> Cache / Riavvio non validi

11
Questo ultimo passo era l'unica cosa che mancava nella mia soluzione. La risposta accettata potrebbe aggiungere questo ad esso.
mirino

senza l'ultimo passaggio menzionato qui, la risposta accettata non funziona. La risposta accettata dovrebbe aggiungere anche questo passaggio /
santhosh kumar

23

Se qualcuno lo sta ancora osservando, la risposta accettata funziona ancora per PyCharm 2016.3 quando l'ho provato. L'interfaccia utente potrebbe essere cambiata, ma le opzioni sono sempre le stesse.

vale a dire. Fare clic con il tasto destro sulla cartella principale -> 'Segna directory come' -> Origine radice


1
Così tante risposte complesse in questa discussione. La soluzione qui presentata ha funzionato così facilmente per me.

16

Dopo aver testato tutte le soluzioni alternative, ti suggerisco di dare un'occhiata Settings -> Project -> project dependenciese riorganizzarle.

prefrence Pycharm


Questo funziona perfettamente per me. Ho installato pygamelì e non più problema di riferimento irrisolto!
Michal Przybylowicz,


5

Generalmente, questo è un problema di pacchetto mancante, basta posizionare il cursore sul riferimento non risolto e premere Alt+Enterper rivelare le opzioni, quindi dovresti sapere come risolverlo.


4

Dopo aver seguito la risposta accettata, facendo quanto segue risolto per me:

FileSettingsProject <your directory/project>Project Dependencies

Scegli la directory / progetto in cui risiede il tuo file con importazioni irrisolte e seleziona la casella per dire a Pycharm che quel progetto dipende dall'altro tuo progetto.

La mia gerarchia di cartelle è leggermente diversa da quella nella domanda. Il mio è così

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

Dire a Pycharm che src dipende dalla MyDirectoryrisoluzione del problema per me!


4

Sebbene tutte le risposte siano davvero utili, c'è una piccola informazione che dovrebbe essere spiegata esplicitamente:

  • In sostanza, un progetto con più directory gerarchiche funziona come un pacchetto con alcuni attributi.
  • Per importare classi create localmente personalizzate, dobbiamo accedere alla directory contenente il .pyfile e creare un __init__.pyfile (vuoto) lì.

Perché questo aiuta è perché questo file è necessario per fare in modo che Python tratti la directory come contenente pacchetti. Saluti!


3

Installa tramite PyCharm (funziona con Community Edition). Apri Settings > Project > Project Interpreterquindi fai clic sull'icona verde + nello screenshot qui sotto. Nella seconda finestra di dialogo che si apre, inserisci il nome del pacchetto e fai clic sul pulsante "Installa pacchetto".

inserisci qui la descrizione dell'immagine



1

Controlla se stai utilizzando l'interprete giusto che dovresti. Stavo ricevendo l'errore "riferimento non risolto 'django" per risolvere il problema Ho cambiato l'interprete di progetto (modificato da Python 3 a Python 2.7) dalle impostazioni del progetto: Seleziona progetto, vai su File -> Impostazioni -> Progetto: -> Interprete progetto -> Sfoglia e selezionare la versione corretta o l'interprete (ad es. /usr/bin/python2.7).


1

Nel mio caso il problema era che stavo usando Virtual environmentche non aveva accesso ai pacchetti di siti globali. Pertanto, l'interprete non era a conoscenza dei pacchetti appena installati.

Per risolvere il problema, basta modificare o ricreare l'interprete virtuale e selezionare l' Inherit global site-packagesopzione.

inserisci qui la descrizione dell'immagine


Questo non ha conseguenze indesiderate e sconfigge un motivo per usare un ambiente virtuale? Cioè, se porti quell'ambiente da qualche parte e quei pacchetti di siti globali sono installati, allora sei nei guai. È quello che pensavo.
theStud54


0

Fatto in PyCharm 2019.3.1 Fare clic con il tasto destro sulla cartella src -> "Segna directory come" -> Fare clic su "Escluso" e la cartella src dovrebbe essere blu.


-1

Pycharm usa venv. Nella console di venv è necessario installare i pacchetti esplicitamente o entrare settings -> project interpreter -> add interpreter -> inherit global site-packages.


-1

Nelle versioni più recenti di pycharm puoi semplicemente fare clic con il pulsante destro del mouse sulla directory o sul pacchetto python da cui vuoi importare un file, quindi fare clic su "Segna directory come" -> "Root delle origini"


-1

Il modo più semplice per risolverlo è eseguire le seguenti operazioni nel software pyCharm:

Fare clic su: File> Impostazioni> (Progetto: il nome del progetto)> Interprete progetto>

quindi fare clic sull'icona "+" sul lato destro per cercare il pacchetto desiderato e installarlo.

Buona codifica !!!


1
Benvenuto in Stack Overflow e grazie per la tua risposta. Sebbene ciò possa essere corretto, in futuro si prega di evitare di pubblicare immagini o collegamenti ad altri siti senza contesto o ulteriori dettagli. Il collegamento potrebbe smettere di funzionare ad un certo punto, rendendo questa risposta meno utile per altri utenti.
CyberJacob,

@CyberJacob Grazie mille e grazie mille per il tuo consiglio, ho modificato la risposta rimuovendo l'immagine e aggiungendo del testo.
zaid.mohammed,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.