Ogni volta che uso sys.path.append
, verrà aggiunta la nuova directory. Tuttavia, una volta chiuso Python, l'elenco tornerà ai valori precedenti (impostazione predefinita?). Come posso aggiungere una directory in modo permanente PYTHONPATH
?
Ogni volta che uso sys.path.append
, verrà aggiunta la nuova directory. Tuttavia, una volta chiuso Python, l'elenco tornerà ai valori precedenti (impostazione predefinita?). Come posso aggiungere una directory in modo permanente PYTHONPATH
?
Risposte:
Devi aggiungere la tua nuova directory alla variabile d'ambiente PYTHONPATH
, separata da due punti dai precedenti contenuti. In qualsiasi forma di Unix, puoi farlo in uno script di avvio appropriato a qualunque shell tu stia usando ( .profile
o qualunque cosa, a seconda della tua shell preferita) con un comando che, di nuovo, dipende dalla shell in questione; in Windows, è possibile farlo tramite la GUI di sistema allo scopo.
superuser.com
potrebbe essere un posto migliore per chiedere di più, ad es. per maggiori dettagli se hai bisogno di dettagli su come arricchire una variabile d'ambiente nella piattaforma e nella shell che hai scelto, dal momento che in realtà non è una domanda di programmazione.
Se stai usando bash (su una distribuzione Mac o GNU / Linux), aggiungi questo al tuo ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
~/.bashrc
quindi eseguire source ~/.bashrc
See stackoverflow.com/questions/2518127/...
sudo su
all'inizio del tuo file .bashrc. Questo post è d' accordo con me. Sul mio sistema, almeno, non è nemmeno necessario.
Invece di manipolare PYTHONPATH
è anche possibile creare un file di configurazione del percorso . Per prima cosa scopri in quale directory Python cerca queste informazioni:
python -m site --user-site
Per qualche motivo questo non sembra funzionare in Python 2.7. Lì puoi usare:
python -c 'import site; site._script()' --user-site
Quindi creare un .pth
file in quella directory contenente il percorso che si desidera aggiungere (creare la directory se non esiste).
Per esempio:
# find directory
SITEDIR=$(python -m site --user-site)
# create if it doesn't exist
mkdir -p "$SITEDIR"
# create new .pth file with our path
echo "$HOME/foo/bar" > "$SITEDIR/somelib.pth"
python -m site --user-site
e (create the directory if it doesn't exist)
erano ciò che mi mancava per farlo funzionare.
somelib.pth
? In caso contrario, indovina perché potrebbe non funzionare?
Questo funziona su Windows
Quindi sarai in grado di vedere tutti i moduli all'interno di quei percorsi dai tuoi script.
Nel caso in cui qualcuno sia ancora confuso, se sei su un Mac, procedi come segue:
open .bash_profile
export PYTHONPATH=$PYTHONPATH:foo/bar
export
chiave era la cosa che mi mancava !!!!, votata, grazie mille!
È possibile aggiungere il percorso tramite il file pythonrc, il cui valore predefinito è ~ / .pythonrc su Linux. vale a dire.
import sys
sys.path.append('/path/to/dir')
Puoi anche impostare la PYTHONPATH
variabile d'ambiente, in un file rc globale, come ~/.profile
su mac o linux, oppure tramite Pannello di controllo -> Sistema -> scheda Avanzate -> Variabili d'ambiente su Windows.
Per dare un po 'più di spiegazione, Python costruirà automaticamente i suoi percorsi di ricerca (come menzionato sopra e qui ) usando lo site.py
script (generalmente situato in sys.prefix + lib/python<version>/site-packages
e lib/site-python
). Si può ottenere il valore di sys.prefix:
python -c 'import sys; print(sys.prefix)'
Lo script site.py aggiunge quindi una serie di directory, dipendenti dalla piattaforma, come ad esempio /usr/{lib,share}/python<version>/dist-packages
, /usr/local/lib/python<version>/dist-packages
al percorso di ricerca e cerca anche questi <package>.pth
file per i file di configurazione che contengono percorsi di ricerca aggiuntivi specifici. Ad esempio, easy-install mantiene la sua raccolta di pacchetti installati che vengono aggiunti a un file specifico del sistema, ad esempio su Ubuntu /usr/local/lib/python2.7/dist-packages/easy-install.pth
. Su un sistema tipico ci sono un sacco di questi file .pth intorno ai quali possono spiegare alcuni percorsi inaspettati in sys.path:
python -c 'import sys; print(sys.path)'
Quindi si può creare un file .pth e inserire una di queste directory (incluso il sito come menzionato sopra ). Questo sembra essere il modo in cui la maggior parte dei pacchetti viene aggiunta a sys.path invece di usare PYTHONPATH.
Nota: su OSX è disponibile uno speciale percorso di ricerca aggiuntivo aggiunto da site.py per 'build del framework' (ma sembra funzionare per il normale uso della riga di comando di python): /Library/Python/<version>/site-packages
(ad esempio per Python2.7:) /Library/Python/2.7/site-packages/
che è dove si suppongono pacchetti di terze parti da installare (vedere il README in quella directory). Quindi si può aggiungere un file di configurazione del percorso che contiene percorsi di ricerca aggiuntivi, ad es. Creare un file chiamato /Library/Python/2.7/site-packages/pip-usr-local.pth
che contiene /usr/local/lib/python2.7/site-packages/
e quindi il sistema Python aggiungerà quel percorso di ricerca.
Per me ha funzionato quando ho cambiato il .bash_profile
file. Sto solo cambiando.bashrc
file ha funzionato solo fino a quando non ho riavviato la shell.
Per python 2.7 dovrebbe apparire come:
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
alla fine del .bash_profile
file.
L'aggiunta export PYTHONPATH="${PYTHONPATH}:/my/other/path"
a ~ / .bashrc potrebbe non funzionare se PYTHONPATH
attualmente non esiste (a causa di :
).
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
L'aggiunta di quanto sopra al mio ~ / .bashrc ha fatto il trucco per me su Ubuntu 16.04
echo PYTHONPATH
e non mi è apparso nulla! ciò significa che questo PYTHONPATH non è stato inizializzato, quindi ho appena incollato questa riga export PYTHONPATH=$PYTHONPATH:<PATH_TO_TF>/TensorFlow/models/research/object_detection
nel mio ~/.bashrc
file e source ~/.bashrc
. Più tardi, quando ho fatto "eco $ PYTHONPATH" mi ha dato :<PATH_TO_TF>/TensorFlow/models/research/object_detection
, qualche suggerimento su se ho fatto qualcosa di sbagliato?
export PYTHONPATH=<PATH_TO_TF>/TensorFlow/models/research/object_detection
, quando esporti PYTHONPATH per la prima volta devi farlo senza la ${PYTHONPATH}:
parte
:<PATH_TO_TF>/TensorFlow/models/research/object_detection
rimuove il 2 ° export PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slim
. qualche suggerimento a riguardo, come risolverlo?
Su MacOS, invece di dare il percorso a una libreria specifica. Dare il percorso completo alla cartella del progetto principale in
~/.bash_profile
fatto la mia giornata, ad esempio:
export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path"
dopo questo fai:
source ~/.bash_profile
L'aggiunta di un nuovo percorso a PYTHONPATH sta effettuando manualmente:
aggiungendo il percorso al tuo profilo ~ / .bashrc, nel terminale da:
vim ~/.bashrc
incolla quanto segue sul tuo profilo
export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"
quindi, assicurati di creare il tuo profilo bashrc ogni volta che esegui il codice nel terminale:
source ~/.bashrc
Spero che questo ti aiuti.
Ho aggiunto permanentemente in Windows Vista, Python 3.5
Sistema> Pannello di controllo> Impostazioni di sistema avanzate> Avanzate (tocca) Variabili d'ambiente> Variabili di sistema> (se non vedi PYTHONPATH nella colonna Variabile) (fai clic) Nuovo> Nome variabile: PYTHONPATH> Valore variabile:
Si prega di scrivere la directory nel valore della variabile. Sono i dettagli della risposta di Blue Peppers.
Lo script seguente funziona su tutte le piattaforme in quanto è puro Python. Si avvale del percorso pathlib, documentato qui https://docs.python.org/3/library/pathlib.html , per farlo funzionare su più piattaforme. Lo esegui una volta, riavvia il kernel e il gioco è fatto. Ispirato da https://medium.com/@arnaud.bertrand/modifying-python-s-search-path-with-pth-files-2a41a4143574 .
from pathlib import Path
to_add=Path(path_of_directory_to_add)
from sys import path
if str(to_add) not in path:
minLen=999999
for index,directory in enumerate(path):
if 'site-packages' in directory and len(directory)<=minLen:
minLen=len(directory)
stpi=index
pathSitePckgs=Path(path[stpi])
with open(str(pathSitePckgs/'current_machine_paths.pth'),'w') as pth_file:
pth_file.write(str(to_add))
Questo è un aggiornamento a questo thread che ha alcune vecchie risposte.
Per quelli che usano MAC-OS Catalina o alcuni più recenti (> = 10.15), è stato introdotto un nuovo Terminale chiamato zsh
(un sostituto del vecchio bash
).
Ho avuto alcuni problemi con le risposte sopra a causa di questa modifica e in qualche modo ho fatto una soluzione alternativa creando il file ~/.zshrc
e incollando la directory dei file su $PATH
e$PYTHONPATH
Quindi, prima ho fatto:
nano ~/.zshrc
Quando l'editor è stato aperto ho incollato il seguente contenuto:
export PATH="${PATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
export PYTHONPATH="${PYTHONPATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
salvato e riavviato il terminale.
IMPORTANTE: il percorso sopra è impostato sul percorso del mio computer, dovresti adattarlo al tuo Python.
In Python 3.6.4 puoi persistere sys.path tra le sessioni di Python in questo modo:
import sys
import os
print(str(sys.path))
dir_path = os.path.dirname(os.path.realpath(__file__))
print(f"current working dir: {dir_path}")
root_dir = dir_path.replace("/util", '', 1)
print(f"root dir: {root_dir}")
sys.path.insert(0, root_dir)
print(str(sys.path))
Ti consiglio vivamente di usare virtualenv e virtualenvwrapper, altrimenti ingombrerai il tuo percorso