2015-02-24 17 views
64

Ho scritto un modulo (un fileche risiede nella cartella my_module). Attualmente sto lavorando al file cool_script.py che risiede nella cartella cur_proj. Ho aperto la cartella in PyCharm usando File - open (e presumo, quindi, è un progetto PyCharm).Errore PyCharm: "Nessun modulo" quando si tenta di importare il proprio modulo (script python)

In ProjectView (CMD-7), posso vedere il mio progetto cur_proj (in rosso) e in "Librerie esterne" vedo my_module. In cool_script.py, posso scrivere

from my_module import my_mod as mm 

e PyCharm rende ancora suggerimento per my_mod. Fin qui tutto bene.

Tuttavia, quando provo a fare funzionare cool_script.py, PyCharm mi dice "No module named my_module"

Questo sembra strano per me, perché

A) nel terminale (OS 10.10.2), in python, posso importare il modulo senza problemi - c'è una voce corrispondente in PYTHONPATH in .bashrc

B) in PyCharm - Impostazioni - Progetto cur_proj - Interprete di progetto - CogWheel accanto a Python i nterpreter - more - mostra i percorsi per l'icona selezionata dell'interprete, i percorsi da PYTHONPATH appaiono (come penso dovrebbero)

Quindi, perché ottengo l'errore quando provo a eseguire cool_script.py? - Cosa mi manca?

Note:

Addendum 2015-Feb-25

Quando vado in PyCharm to Run - Modifica configurazioni, per il mio progetto attuale, ci sono due opzioni che vengono selezionati con un segno di spunta: "Aggiungi radici di contenuti di PYTHONPATH" e "Aggiungi root di origine a PYTHONPATH". Quando ho entrambi deselezionato, posso caricare il mio modulo.

Quindi funziona ora - ma perché?

Altre domande emerse:

  • Cosa sono le "radici" di contenuti e quali sono le radici "source"? E perché aggiungere qualcosa al PYTHONPATH lo fa in qualche modo spezzare?
  • devo deselezionare entrambe le opzioni tutte le volte (quindi anche nei valori di default, non solo le configurazioni specifiche del progetto (pannello a sinistra della finestra di dialogo Esegui/debug configurazioni)?
+1

È possibile che l'abbia già provato, ma quando si importano moduli da altri pacchetti, includere nomepacchetto 'da foldername.mymodule import mymethod'. Un'altra cosa che ho dovuto fare è aggiungere la cartella __init_.py vuota in tutte le cartelle che usereste per arrivare al vostro modulo, quindi in caso di 'from parentfolder.childfolder.mymodule ...' avreste bisogno di init in due cartelle. A seconda di dove si trovano le cartelle l'una rispetto all'altra, potrebbe essere necessario avere un pacchetto di primo livello in 'sys.path' come descritto in questa [risposta] (http://stackoverflow.com/questions/8951255/import-script- from-a-parent-directory) – ziddarth

+4

Ho avuto anche il tuo problema. Il seguente post ha risolto i miei problemi: http://stackoverflow.com/questions/21236824/unresolved-reference-issue-in-pycharm – user3155053

+0

Hai identificato il motivo per cui deselezionare quelle caselle di controllo funziona in realtà piuttosto che controllarle? –

risposta

4

my_module è un non cartella di un modulo e non è possibile importare una cartella, provare a spostare my_mod.py nella stessa cartella del cool_script.py e poi fare import my_mod as mm. Questo perché pitone guarda solo nella directory corrente e sys.path, e così non si trovano my_mod.py meno che non sia nella stessa directory

Oppure si può guardare here una risposta che ti dice come importare da altre directory.

Per quanto riguarda le altre tue domande, non so perché non utilizzo PyCharm.

+0

Puoi creare un __init__.py in una cartella, l'interprete python leggerà come pacchetto python: http://mikegrouchy.com/blog/2012/05/be-pythonic-__init__py.html –

0

Le root di contenuto sono cartelle che contengono il codice del progetto mentre le radici di origine sono definite uguali. L'unica differenza che ho capito è che il codice nelle root di origine è costruito prima del codice nella root del contenuto.

Deselezionarli non influiscono sul tempo di esecuzione fino al punto in cui non si eseguono moduli separati nel pacchetto che vengono collegati manualmente a Django. Ciò significa che se uno qualsiasi dei tuoi file non contiene "from django import ..." o una delle funzioni non viene chiamata tramite django, deselezionando queste 2 opzioni si verificherà un malfunzionamento.

Aggiornamento: il problema si verifica solo quando si utilizza Virtual Environmanet e solo quando si controlla il progetto tramite il terminale fornito. Perché il terminale funziona ancora tramite il sistema predefinito pyhtonpath e non l'ambiente virtuale. mentre il pannello di controllo django di Python funziona bene.

0

Ciò può essere causato quando l'interprete Python non riesce a trovare il codice. Devi citare esplicitamente a Python per trovare il tuo codice in questa posizione.

Per farlo:

  • Vai alla console python
  • Aggiungi sys.path.extend(['your module location']) alla console Python.

Nel tuo caso:

  • Vai alla console python,
  • Sulla partenza, scrivere il codice seguente:

    import sys 
    sys.path.extend([my module URI location]) 
    
  • Una volta che hai scritto questa dichiarazione si può eseguire il seguente comando:

    from mymodule import functions 
    
2

Stavo ricevendo l'errore con "Aggiungi sorgenti di origine a PYTHONPATH". Il mio problema era che avevo due cartelle con lo stesso nome, come project/subproject1/thing/src e project/subproject2/thing/src e avevo entrambe contrassegnate come root di origine. Quando ho rinominato una delle cartelle "cosa" in "thing1" (qualsiasi nome univoco), ha funzionato.

Forse se PyCharm aggiunge automaticamente root sorgenti selezionate, non utilizza il percorso completo e quindi confonde le cartelle con lo stesso nome.

137

Se il proprio modulo si trova nello stesso percorso, è necessario contrassegnare il percorso come Sources Root. Nell'esploratore di progetto, fare clic con il tasto destro sulla directory che si desidera importare.Quindi selezionare Mark Directory As e selezionare Sources Root.

Spero che questo aiuti.

+2

Questo ha funzionato per me ma ho anche avuto per eliminare e ricreare la configurazione di esecuzione che avevo precedentemente creato prima di contrassegnare la cartella come root delle fonti. – grinch

+0

E 'necessario aggiungere '__init __. Py' per fare in modo che Python tratti le directory come contenenti i pacchetti: http://stackoverflow.com/questions/448271/what-is-init-py-for#answer-448279 –

+0

Come faresti questo? se non stavi usando pycharm? Sto incontrando lo stesso identico problema. –

1

Il passaggio di confusione della chiave da eseguire è ricreare la configurazione di esecuzione per il file di origine che si sta tentando di eseguire, in modo che l'IDE prelevi i nuovi percorsi.

Il modo in cui ha funzionato per me era andare in Esegui/Modifica configurazioni ..., selezionare la configurazione per il file che si sta tentando di eseguire sul lato sinistro, deselezionare "Aggiungi sorgenti di origine a PYTHONPATH" casella, salva, quindi torna indietro e seleziona la casella e salva. ALLORA avrebbe funzionato.

3

Quello che ho provato è di trovare il percorso in cui si trovano i miei file.

ad es. E:\git_projects\My_project\__init__.py is my location.

sono andato su File -> Impostazioni -> Progetto: My_project -> Struttura del progetto e ha aggiunto la radice contenuti a circa posto menzione E:\git_projects\My_project

ha funzionato per me.

+0

Sorgente per cui la cartella nella Struttura del progetto ha funzionato. Grazie. – Microos

Problemi correlati