Ilekroć użyję sys.path.append, nowy katalog zostanie dodany. Jednak po zamknięciu Pythona lista powróci do poprzednich (domyślnych?) Wartości. Jak mogę na stałe dodać katalog PYTHONPATH?
Ilekroć użyję sys.path.append, nowy katalog zostanie dodany. Jednak po zamknięciu Pythona lista powróci do poprzednich (domyślnych?) Wartości. Jak mogę na stałe dodać katalog PYTHONPATH?
Odpowiedzi:
Musisz dodać nowy katalog do zmiennej środowiskowej PYTHONPATH, oddzielony dwukropkiem od jego poprzedniej zawartości. W dowolnej formie Uniksa możesz to zrobić w skrypcie startowym odpowiednim dla powłoki, której używasz ( .profilelub cokolwiek, w zależności od ulubionej powłoki) za pomocą polecenia, które znowu zależy od powłoki; w systemie Windows można to zrobić za pomocą graficznego interfejsu użytkownika.
superuser.com może być lepszym miejscem do zadawania dalszych pytań, tj. po więcej szczegółów, jeśli potrzebujesz szczegółowych informacji o tym, jak wzbogacić zmienną środowiskową na wybranej platformie i powłoce, ponieważ tak naprawdę nie jest to pytanie programistyczne per se.
Jeśli używasz bash (na dystrybucji Mac lub GNU / Linux), dodaj to do swojego ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
~/.bashrca następnie uruchom source ~/.bashrcpatrz stackoverflow.com/questions/2518127/…
Zamiast manipulacji PYTHONPATHmożesz również utworzyć plik konfiguracji ścieżki . Najpierw dowiedz się, w którym katalogu Python szuka tych informacji:
python -m site --user-site
Z jakiegoś powodu nie działa to w Pythonie 2.7. Tam możesz użyć:
python -c 'import site; site._script()' --user-site
Następnie utwórz .pthplik w tym katalogu zawierający ścieżkę, którą chcesz dodać (utwórz katalog, jeśli nie istnieje).
Na przykład:
# 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-sitei (create the directory if it doesn't exist)części były to, czego brakuje, aby uzyskać jego pracy.
somelib.pth? Jeśli nie, zgadnij, dlaczego to nie działa?
Działa to w systemie Windows
Wtedy będziesz mógł zobaczyć wszystkie moduły w tych ścieżkach ze swoich skryptów.
Jeśli ktoś nadal jest zdezorientowany - jeśli korzystasz z komputera Mac, wykonaj następujące czynności:
open .bash_profileexport PYTHONPATH=$PYTHONPATH:foo/barexportkluczem było to, czego mi brakowało !!!!, głosowałem, dziękuję bardzo!
Możesz dodać ścieżkę za pomocą pliku pythonrc, który ma domyślnie ~ / .pythonrc w systemie Linux. to znaczy.
import sys
sys.path.append('/path/to/dir')
Możesz także ustawić PYTHONPATHzmienną środowiskową w globalnym pliku rc, takim jak ~/.profileMac lub Linux, lub za pomocą Panelu sterowania -> System -> zakładka Zaawansowane -> Zmienne środowiskowe w systemie Windows.
Aby dać nieco więcej wyjaśnień, Python automatycznie konstruuje swoje ścieżki wyszukiwania (jak wspomniano powyżej i tutaj ) przy użyciu site.pyskryptu (zwykle znajdującego się w sys.prefix +, lib/python<version>/site-packagesjak również lib/site-python). Można uzyskać wartość sys.prefix:
python -c 'import sys; print(sys.prefix)'
Site.py skrypt następnie dodaje szereg katalogów, w zależności od platformy, takie jak /usr/{lib,share}/python<version>/dist-packages, /usr/local/lib/python<version>/dist-packagesna ścieżce przeszukiwania , a także wyszukuje te ścieżki w <package>.pthplikach konfiguracyjnych, które zawierają konkretne dodatkowe ścieżki wyszukiwania. Na przykład easy-install utrzymuje kolekcję zainstalowanych pakietów, które są dodawane do pliku specyficznego dla systemu, np. Na Ubuntu /usr/local/lib/python2.7/dist-packages/easy-install.pth. W typowym systemie jest kilka takich plików .pth, które mogą wyjaśnić niektóre nieoczekiwane ścieżki w sys.path:
python -c 'import sys; print(sys.path)'
Można więc utworzyć plik .pth i umieścić w dowolnym z tych katalogów (w tym sitedir, jak wspomniano powyżej ). Wydaje się, że jest to sposób, w jaki większość pakietów jest dodawana do sys.path, zamiast używać PYTHONPATH.
Uwaga: W OSX istnieje specjalna dodatkowa ścieżka wyszukiwania dodana przez site.py dla „kompilacji frameworka” (ale wydaje się, że działa w przypadku normalnego używania Pythona w wierszu poleceń): /Library/Python/<version>/site-packages(np. Dla Python2.7:), /Library/Python/2.7/site-packages/gdzie powinny znajdować się pakiety innych firm do zainstalowania (zobacz plik README w tym katalogu). Można więc dodać plik konfiguracyjny ścieżki zawierający dodatkowe ścieżki wyszukiwania, np. Utworzyć plik o nazwie, /Library/Python/2.7/site-packages/pip-usr-local.pthktóry zawiera, /usr/local/lib/python2.7/site-packages/a następnie python systemowy doda tę ścieżkę wyszukiwania.
Dla mnie zadziałało, gdy zmieniłem .bash_profileplik. Zmiana .bashrcpliku działała tylko do momentu ponownego uruchomienia powłoki.
W Pythonie 2.7 powinno to wyglądać następująco:
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
na końcu .bash_profilepliku.
Dodawanie export PYTHONPATH="${PYTHONPATH}:/my/other/path"do ~ / .bashrc może nie działać, jeśli PYTHONPATHobecnie nie istnieje (z powodu :).
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
Dodanie powyższego do mojego ~ / .bashrc załatwiło sprawę w Ubuntu 16.04
echo PYTHONPATHi nic się nie pokazało! oznacza to, że ta PYTHONPATH nie została zainicjowana, więc po prostu wklejam ten wiersz export PYTHONPATH=$PYTHONPATH:<PATH_TO_TF>/TensorFlow/models/research/object_detectiondo ~/.bashrcpliku i do source ~/.bashrc niego. Później, kiedy „powtórzyłem $ PYTHONPATH”, dało mi :<PATH_TO_TF>/TensorFlow/models/research/object_detectionto jakąś sugestię, czy zrobiłem coś złego?
export PYTHONPATH=<PATH_TO_TF>/TensorFlow/models/research/object_detection, kiedy eksportujesz PYTHONPATH po raz pierwszy, musisz to zrobić bez ${PYTHONPATH}:udziału
:<PATH_TO_TF>/TensorFlow/models/research/object_detectionusuwa 2 export PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slim.. jakieś sugestie na ten temat, jak to naprawić?
W systemie MacOS zamiast podawania ścieżki do określonej biblioteki. Podanie pełnej ścieżki do głównego folderu projektu w
~/.bash_profile
sprawił, że mój dzień, na przykład:
export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path"
po tym wykonaj:
source ~/.bash_profile
Dodanie nowej ścieżki do PYTHONPATH odbywa się ręcznie przez:
dodając ścieżkę do swojego profilu ~ / .bashrc, w terminalu przez:
vim ~/.bashrc
wklej następujące elementy do swojego profilu
export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"
następnie upewnij się, że Twój profil bashrc jest za każdym razem, gdy uruchamiasz swój kod w terminalu:
source ~/.bashrc
Mam nadzieję że to pomoże.
Dodałem na stałe do systemu Windows Vista, Python 3.5
System> Panel sterowania> Zaawansowane ustawienia systemu> Zaawansowane (dotknij) Zmienne środowiskowe> Zmienne systemowe> (jeśli nie widzisz zmiennej PYTHONPATH w kolumnie Zmienna) (kliknij) Nowy> Nazwa zmiennej: PYTHONPATH> Wartość zmiennej:
Zapisz katalog w wartości zmiennej. To szczegóły odpowiedzi Blue Peppers.
Poniższy skrypt działa na wszystkich platformach, ponieważ jest czystym Pythonem. Wykorzystuje ścieżkę pathlib, udokumentowaną tutaj https://docs.python.org/3/library/pathlib.html , aby działała na wielu platformach. Uruchom go raz, zrestartuj jądro i to wszystko. Inspirowany przez 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))
To jest aktualizacja tego wątku, która zawiera kilka starych odpowiedzi.
Dla osób używających MAC-OS Catalina lub nowszych (> = 10,15), wprowadzono nowy terminal o nazwie zsh(zamiennik starego bash).
Miałem pewne problemy z powyższymi odpowiedziami z powodu tej zmiany i nieco rozwiązałem ten problem, tworząc plik ~/.zshrci wklejając katalog plików do $PATHi$PYTHONPATH
Najpierw zrobiłem:
nano ~/.zshrc
Po otwarciu edytora wkleiłem następującą treść:
export PATH="${PATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
export PYTHONPATH="${PYTHONPATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
zapisał go i ponownie uruchomił terminal.
WAŻNE: Ścieżka powyżej jest ustawiona na ścieżkę mojego komputera, musisz ją dostosować do swojego pytona.
W Python 3.6.4 możesz utrzymywać sys.path w sesjach Pythona w następujący sposób:
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))
Zdecydowanie zalecamy korzystanie z virtualenv i virtualenvwrapper, w przeciwnym razie zagracisz swoją ścieżkę