Jak mogę wykorzystać PYTHONPATH? Kiedy próbuję uruchomić skrypt w ścieżce, plik nie zostaje znaleziony. Kiedy przechodzę do katalogu zawierającego skrypt, skrypt jest uruchamiany. Więc po co jest PYTHONPATH?
$ echo $PYTHONPATH
:/home/randy/lib/python
$ tree -L 1 '/home/randy/lib/python'
/home/randy/lib/python
├── gbmx_html.py
├── gbmx.py
├── __init__.py
├── __pycache__
├── scripts
└── yesno.py
$ python gbmx.py -h
python: can't open file 'gbmx.py': [Errno 2] No such file or directory
$ cd '/home/randy/lib/python'
Po cd do katalogu plików to działa ...
$ python gbmx.py -h
usage: gbmx.py [-h] [-b]
Dlaczego nie mogę skorzystać z PYTHONPATH?
PYTHONPATH
.PYTHONPATH
Odpowiedzi:
Myślę, że jesteś trochę zdezorientowany. PYTHONPATH ustawia ścieżkę wyszukiwania do importowania modułów Pythona, a nie do ich wykonywania, tak jak próbujesz.
http://docs.python.org/2/using/cmdline.html#envvar-PYTHONPATH
To, czego szukasz, to PATH.
Jednak aby uruchomić skrypt w języku Python jako program, musisz również ustawić shebang dla Pythona w pierwszym wierszu. Coś takiego powinno działać:
I nadaj mu uprawnienia do wykonywania:
Wtedy powinieneś być w stanie po prostu biegać
gmbx.py
z dowolnego miejsca.źródło
export PATH=$PATH:/home/etc
Mylisz PATH i PYTHONPATH. Musisz to zrobić:
PYTHONPATH jest używany przez interpreter języka Python do określenia, które moduły mają zostać załadowane.
PATH jest używana przez powłokę do określenia, które pliki wykonywalne mają zostać uruchomione.
źródło
PYTHONPATH
wpływa tylko naimport
instrukcje, a nie na wyszukiwanie plików Pythona przez interpreter najwyższego poziomu podane jako argumenty.Konieczność
PYTHONPATH
ustawienia nie jest dobrym pomysłem - podobnie jak w przypadku wszystkiego, co zależy od zmiennych środowiskowych, konsekwentne replikowanie rzeczy na różnych maszynach staje się trudne. Lepiej jest używać „pakietów” Pythona, które można zainstalować (używając „pip” lub distutils) w ścieżkach zależnych od systemu, o których Python już wie.Przeczytaj https://the-hitchhikers-guide-to-packaging.readthedocs.org/en/latest/ - „The Hitchhiker's Guide to Packaging”, a także http://docs.python.org/3/tutorial /modules.html - co wyjaśnia PYTHONPATH i pakiety na niższym poziomie.
źródło
PYTHONPATH
. Nie liczę już, ile razy miałem do czynienia z prymitywnym programem w Pythonie, który nalegał na topip install
, że byłem zwykłym użytkownikiem na hoście nie tylko bez uprawnień roota (wiem, że pip może wykonać lokalną instalację), ale również bez pip. Oto rada dla wszystkich dystrybuujących oprogramowanie Python - najpierw spróbuj zainstalować własne oprogramowanie na waniliowym hoście z systemem Linux, na którym nie masz uprawnień administratora i tylko podstawową dystrybucję Pythona bez pip.Myślę, że jesteś pomieszany między PATH i PYTHONPATH. Wszystko, co musisz zrobić, aby uruchomić „skrypt”, to dodać jego katalog nadrzędny do zmiennej PATH. Możesz to sprawdzić, uruchamiając
Ponadto, jeśli
myscripy.py
zależy od modułów niestandardowych, ich katalogi nadrzędne muszą również zostać dodane do zmiennej PYTHONPATH. Niestety, ponieważ projektanci Pythona najwyraźniej używali narkotyków, testowanie importu w replik z poniższymi nie gwarantuje, że PYTHONPATH jest poprawnie ustawiony do użycia w skrypcie. Ta część programowania w Pythonie jest magiczna i nie można na nią odpowiednio odpowiedzieć w przepływie stosu.źródło
Z PYTHONPATH ustawionym jak w twoim przykładzie, powinieneś być w stanie to zrobić
-m
opcja sprawi, że Python będzie szukał twojego modułu w ścieżkach Python zwykle przeszukuje moduły, w tym te, które dodałeś do PYTHONPATH. Kiedy uruchamiasz interpreter jakpython gmbx.py
, szuka on konkretnego pliku, a PYTHONPATH nie ma zastosowania.źródło