Python - dodaj PYTHONPATH podczas uruchamiania modułu wiersza poleceń


86

Chcę biec:

python somescript.py somecommand

Ale kiedy to uruchamiam, muszę PYTHONPATHdołączyć określony katalog. Nie mogę po prostu dodać go do moich zmiennych środowiskowych, ponieważ katalog, który chcę dodać, zmienia się na podstawie uruchomionego projektu. Czy istnieje sposób na zmianę PYTHONPATHpodczas uruchamiania skryptu? Uwaga: nie mam nawet PYTHONPATHzmiennej, więc nie muszę się martwić o dołączenie do niej, a nie nadpisanie jej podczas uruchamiania tego skryptu.

Odpowiedzi:


148

Dla Mac / Linux;

PYTHONPATH=/foo/bar/baz python somescript.py somecommand

W systemie Windows skonfiguruj opakowanie pythonpath.bat;

@ECHO OFF
setlocal
set PYTHONPATH=%1
python %2 %3
endlocal

i wywołać pythonpath.batplik skryptu, taki jak;

pythonpath.bat /foo/bar/baz somescript.py somecommand

@ İsmail - dzięki. Jak jednak mogę to zrobić, uruchamiając skrypt z wiersza poleceń? Nie używam Pythona, nie importuję rzeczy i nie uruchamiam go ręcznie.
orokusaki

Na Mac / Linux zrobiłbyś toPYTHONPATH=/foo/bar python somescript.py somecommand
ismail

Próbowałem, python -c"import sys;sys.path.append('/my/dir')"a potem python myscript.py mycommand, ale oczywiście nie dzieli ścieżki z pierwszej sesji tłumaczeniowej z następną. Ach, właśnie zobaczyłem twój następny komentarz, próbuję teraz ... Nie działa w WinXP.
orokusaki,

1
W unsetsystemie Windows nie ma polecenia zmiennej środowiskowej. Zamiast tego dodaj znak setlocalpo inicjału, echo offa po endlocalzakończeniu działania skryptu .bat wystąpi niejawny (i PYTHONPATHzostanie przywrócony do jego poprzedniej wartości).
martineau

5
W systemie Windows, jeśli chcesz dołączyć istniejącą ścieżkę PYTHONPATH, możesz użyć set PYTHONPATH=%PYTHONPATH%;%1.
martineau

49
 import sys
 sys.path.append('your certain directory')

Zasadniczo sys.path to lista ze wszystkimi ścieżkami wyszukiwania dla modułów Pythona. Jest inicjowany przez interpreter. Zawartość PYTHONPATH jest automatycznie dodawana na końcu tej listy.


10
lub sys.path.insert (0, '/ some / directory'), aby umieścić go na początku ścieżki. Dzięki temu Twój materiał może zastąpić inne rzeczy, które mogą już znajdować się na pythonpath.
sienkiew

Użyłem tej odpowiedzi do uruchomienia uninttest poza IDE pydev-eclipse.
LAL

sys.path.append(r'D:\PyCharmProjects\cheese_shoppe')przykład w systemie Windows.
Bob Stein

9

Jeśli uruchamiasz polecenie z powłoki zgodnej z POSIX, na przykład bash, możesz ustawić zmienną środowiskową w następujący sposób:

PYTHONPATH="/path/to" python somescript.py somecommand

Jeśli wszystko jest w jednym wierszu, wartość środowiska PYTHONPATH ma zastosowanie tylko do tego jednego polecenia.

$ echo $PYTHONPATH

$ python -c 'import sys;print("/tmp/pydir" in sys.path)'
False
$ PYTHONPATH=/tmp/pydir python -c 'import sys;print("/tmp/pydir" in sys.path)'
True
$ echo $PYTHONPATH

Właśnie tego szukałem, wielkie dzięki. Z jakiegoś powodu bieganie python -c "import sys; sys.path.insert(0,'my/path'); import mymodule"nie działało.
Luke Davis

0

Możesz spróbować wykonać tę funkcję w swoim skrypcie

python -c "import sys; sys.path.append('/your/script/path'); import yourscript; yourscript.yourfunction()"

-1

Dotyczy to okien:

Na przykład mam na pulpicie folder o nazwie „mygrapher”. Wewnątrz znajdują się foldery zwane „obliczenia” i „wykresy”, które zawierają pliki Pythona, których potrzebuje mój główny plik „grapherMain.py”. Ponadto „grapherMain.py” jest przechowywany w „graphing”. Aby uruchomić wszystko bez przenoszenia plików, mogę zrobić skrypt wsadowy. Nazwijmy ten plik wsadowy „rungraph.bat”.

@ECHO OFF
setlocal
set PYTHONPATH=%cd%\grapher;%cd%\calculation
python %cd%\grapher\grapherMain.py
endlocal

Ten skrypt znajduje się w „mygrapher”. Aby uruchomić rzeczy, wchodziłem do wiersza poleceń, a następnie robiłem:

>cd Desktop\mygrapher (this navigates into the "mygrapher" folder)
>rungraph.bat (this executes the batch file)

5
i czym różni się to od odpowiedzi @ İsmail 'cartman' Dönmez?
Alex Okrushko
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.