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 ( .profile
lub 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"
~/.bashrc
a następnie uruchom source ~/.bashrc
patrz stackoverflow.com/questions/2518127/…
Zamiast manipulacji PYTHONPATH
moż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 .pth
plik 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-site
i (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_profile
export PYTHONPATH=$PYTHONPATH:foo/bar
export
kluczem 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ć PYTHONPATH
zmienną środowiskową w globalnym pliku rc, takim jak ~/.profile
Mac 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.py
skryptu (zwykle znajdującego się w sys.prefix +, lib/python<version>/site-packages
jak 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-packages
na ścieżce przeszukiwania , a także wyszukuje te ścieżki w <package>.pth
plikach 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.pth
któ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_profile
plik. Zmiana .bashrc
pliku 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_profile
pliku.
Dodawanie export PYTHONPATH="${PYTHONPATH}:/my/other/path"
do ~ / .bashrc może nie działać, jeśli PYTHONPATH
obecnie 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 PYTHONPATH
i 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_detection
do ~/.bashrc
pliku i do source ~/.bashrc
niego. Później, kiedy „powtórzyłem $ PYTHONPATH”, dało mi :<PATH_TO_TF>/TensorFlow/models/research/object_detection
to 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_detection
usuwa 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 ~/.zshrc
i wklejając katalog plików do $PATH
i$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ę