Making Anaconda Python Find Your Python Scripts – Modifying the PYTHONPATH

(Poniższe informacje dotyczą tylko instalacji Anaconda. Podstawowa idea ma zastosowanie do każdej instalacji Pythona, ale dokładne sposoby rozwiązania tego problemu są inne.)

Załóżmy, że napisałeś moduł Pythona o nazwie, powiedzmy, coolscript, który ma wszystkie rodzaje fajnych funkcji, które napisałeś. Może zapisałeś go na pulpicie swojego komputera. Może potem przejdziesz do Anaconda Navigator, odpalisz Spydera lub inny program w Ancondzie i spróbujesz zaimportować te funkcje linią kodu w stylu,

from coolscript import *

Ale, niestety, otrzymasz błąd:

ModuleNotFoundError: No module named 'coolscript'

Wiele rzeczy może to powodować, ale być może jest tak dlatego, że katalog, w którym coolscipt.py rezyduje, nie jest częścią PYTHONPATH, tj.e., zestawu katalogów plików, w których Python szuka potrzebnych mu plików. Dowiedzmy się, czym jest nasz PYTHONPATH i sprawdźmy, czy zawiera nasz skrypt. Uruchom program Anaconda Prompt. Możesz to zrobić bezpośrednio z menu Start w Windows lub aplikacji Launcher w MacOS, ale innym sposobem jest uruchomienie programu Anaconda Navigator i uruchomienie terminala, jak na poniższym zrzucie ekranu:

Teraz uruchom to polecenie, aby zobaczyć swoje PYTHONPATH:

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

W moim przypadku na osobistej maszynie z systemem Windows ze świeżą instalacją Anaconda3 otrzymuję następujący wynik:

Bez względu na to, że mój skrypt znajduje się w jednym z tych folderów (lub ich podfolderów), nie zostanie on znaleziony przez pythona, chyba że jawnie wskażesz pełną ścieżkę podczas wywoływania go z pythona (lub jeśli uruchomisz pythona w katalogu, w którym rezyduje plik). Idealnie byłoby uniknąć tego problemu poprzez prawidłową instalację modułów. Jeśli to ktoś inny napisał moduł kodu, najlepszym sposobem jest zainstalowanie go za pomocą conda lub, jeśli nie jest to możliwe, za pomocą pip lub pliku setup.py. Są to również najlepsze praktyki dla własnego kodu.

Jednakże, czasami pomocne jest posiadanie wygodnego „katalogu roboczego” dla tymczasowego lub niedokończonego kodu, i możesz nie chcieć nawigować pythonem do tego katalogu za każdym razem, gdy wywołujesz kod. Jednym ze sposobów rozwiązania tego problemu jest dodanie preferowanego katalogu do twojego PYTHONPATH.

Jeśli chcemy tymczasowo dodać katalog do naszego pythona, moglibyśmy po prostu uruchomić następujące polecenia w terminalu pythona, którego używamy do uruchomienia skryptu:

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

gdzie „/path/to/my/package” powinno zostać zmienione na ścieżkę do folderu zawierającego twój plik skryptu pythona. To podejście będzie działać tylko do momentu zamknięcia tej instancji kompilatora pythona; musielibyśmy uruchamiać go ponownie za każdym razem, gdy uruchamiamy wiersz poleceń pythona.

Jeśli chcemy na stałe dodać folder do naszego PYTHONPATH, możemy to zrobić, tworząc plik .pth w katalogu site-packages. Na powyższym zrzucie ekranu widać folder site-packages. Każda instalacja Anacondy powinna posiadać folder o tej nazwie. Utwórz nowy plik tekstowy w tym katalogu, nadając mu nazwę z rozszerzeniem .pth (np. plik o nazwie extrapythonfolders.pth będzie w porządku). W tym pliku tekstowym możesz wypisać katalogi, które chcesz włączyć do swojego PYTHONPATH, po jednym w każdym wierszu. Na przykład, na komputerze z systemem Windows mogę dodać linię o nazwie C:\myscripts. Zapisz plik z nowymi lokalizacjami, a następnie spróbuj ponownie, wykonując następujące polecenie w Anaconda Prompt:

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

Powinieneś zobaczyć, że nowe katalogi są teraz uwzględnione (być może będziesz musiał zrestartować Anacondę, aby to zadziałało we wszystkich programach). Powinieneś teraz być w stanie importować moduły lub uruchamiać kod z tego katalogu, niezależnie od tego, gdzie zaczynasz Pythona w swojej strukturze plików.

.

Dodaj komentarz