Fare in modo che Anaconda Python trovi i vostri script Python – Modificare il PYTHONPATH

(Le seguenti informazioni si applicano solo alle installazioni Anaconda. L’idea di base si applica a qualsiasi installazione python, ma i modi precisi di affrontare il problema sono diversi.)

Supponiamo che tu scriva un modulo Python chiamato, diciamo, coolscript che ha tutti i tipi di funzioni interessanti che hai scritto. Forse lo hai salvato sul desktop del tuo computer. Forse poi andate su Anaconda Navigator, avviate Spyder o un altro programma all’interno di Anconda, e provate a importare quelle funzioni con una linea di codice come,

from coolscript import *

Ma, ahimè, ricevete un errore:

ModuleNotFoundError: No module named 'coolscript'

Tante cose potrebbero causare questo, ma forse è perché la directory in cui risiede coolscipt.py non fa parte del PYTHONPATH, cioèe., l’insieme delle directory in cui Python cerca i file di cui ha bisogno. Scopriamo qual è la nostra PYTHONPATH e vediamo se contiene il nostro script. Avviate un prompt di Anaconda. Potreste essere in grado di farlo direttamente dal menu Start in Windows o dall’app Launcher in MacOS, ma un altro modo per avviarlo è lanciare il Navigatore Anaconda e lanciare un terminale come nello screenshot qui sotto:

Ora, esegui questo comando per vedere il tuo PYTHONPATH:

python -c "import sys; print('\n'.join(sys.path))"

Nel mio caso, ottengo il seguente risultato su una macchina personale basata su Windows con una fresca installazione di Anaconda3:

A meno che il mio script si trovi in una di queste cartelle (o nelle loro sottocartelle), non verrà trovato da python a meno che non indichiate esplicitamente il percorso completo quando lo chiamate da python (o se avviate python nella directory in cui risiede il file). Idealmente, vogliamo evitare questo problema installando correttamente i moduli. Se è qualcun altro a scrivere il modulo di codice, il modo migliore per farlo è installarlo usando conda o, se questo non è possibile, usando pip o un file setup.py. Queste sono anche le migliori pratiche per il proprio codice.

Tuttavia, a volte è utile avere una comoda “directory di lavoro” per il codice temporaneo o non finito, e potreste non voler navigare in python verso quella directory ogni singola volta che chiamate il codice. Un modo per risolvere questo problema è aggiungere la vostra directory preferita al vostro PYTHONPATH.

Se vogliamo aggiungere temporaneamente una directory al nostro python, potremmo semplicemente eseguire i seguenti comandi nel terminale python che stiamo usando per eseguire lo script:

import syssys.path.append(r'/path/to/my/package')

dove “/path/to/my/package” dovrebbe essere cambiato nel percorso della cartella contenente il vostro file di script python. Questo approccio funzionerebbe solo finché non chiudiamo quell’istanza del compilatore python; avremmo bisogno di rieseguirlo ogni volta che avviamo una linea di comando python.

Se vogliamo aggiungere più permanentemente una cartella al nostro PYTHONPATH, possiamo farlo creando un file .pth nella directory site-packages. Nello screenshot qui sopra, notate la cartella site-packages. Ogni installazione di Anaconda dovrebbe avere una cartella con quel nome. Create un nuovo file di testo in quella cartella, nominandolo in modo che abbia l’estensione .pth (ad esempio, un file chiamato extrapythonfolders.pth andrebbe bene). All’interno di quel file di testo, puoi elencare le directory che vuoi includere nel tuo PYTHONPATH, una per riga. Per esempio, su una macchina Windows potrei aggiungere una linea che dice C:\myscripts. Salva il file con queste nuove posizioni, e poi prova di nuovo ad eseguire il seguente comando sul Prompt di Anaconda:

python -c "import sys; print('\n'.join(sys.path))"

Dovresti vedere che le tue nuove directory sono ora incluse (potresti dover riavviare Anaconda per farlo funzionare in tutti i suoi software, comunque). Ora dovreste essere in grado di importare moduli o eseguire codice da quella directory, indipendentemente da dove iniziate python nella vostra struttura di file.

.

Lascia un commento