Python - добавить PYTHONPATH во время запуска модуля командной строки


86

Я хочу бежать:

python somescript.py somecommand

Но когда я запускаю это, мне нужно PYTHONPATHвключить определенный каталог. Я не могу просто добавить его в свои переменные среды, потому что каталог, в который я хочу добавить изменения, зависит от того, какой проект я запускаю. Есть ли способ изменить PYTHONPATHпри запуске скрипта? Примечание: у меня даже нет PYTHONPATHпеременной, поэтому мне не нужно беспокоиться о добавлении к ней, а не о замене ее во время выполнения этого скрипта.

Ответы:


148

Для Mac / Linux;

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

Для Windows установите оболочку pythonpath.bat;

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

и вызовите pythonpath.batфайл сценария, например:

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

@ Ismail - спасибо. Однако как я могу это сделать при запуске сценария из командной строки? Я не запускаю Python, не импортирую и не запускаю его вручную.
orokusaki

На Mac / Linux вы бы сделалиPYTHONPATH=/foo/bar python somescript.py somecommand
ismail

Я попробовал python -c"import sys;sys.path.append('/my/dir')"и потом python myscript.py mycommand, но он явно не разделяет путь от первого сеанса интерпретатора со следующим. Ах, только что видел ваш следующий комментарий, сейчас пытаюсь ... Не работает на WinXP.
orokusaki 02

1
В unsetWindows нет команды переменной среды. Вместо этого добавьте setlocalпосле начального, echo offи тогда неявное endlocalбудет происходить, когда сценарий .bat завершится (и PYTHONPATHбудет восстановлен до своего предыдущего значения).
Мартино 02

5
В Windows, если вы хотите добавить путь к существующему PYTHONPATH, вы можете использовать set PYTHONPATH=%PYTHONPATH%;%1.
Мартино 02

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

По сути sys.path - это список со всеми путями поиска для модулей Python. Инициализируется интерпретатором. Содержимое PYTHONPATH автоматически добавляется в конец этого списка.


10
или sys.path.insert (0, '/ some / directory'), чтобы поместить его в начало пути. Это позволяет вашему материалу переопределять другие вещи, которые уже могут быть на пути к python.
sienkiew 02

Я использовал этот ответ для запуска uninttest за пределами среды разработки pydev-eclipse.
LAL

sys.path.append(r'D:\PyCharmProjects\cheese_shoppe')пример в Windows.
Боб Штайн,

9

Если вы запускаете команду из POSIX-совместимой оболочки, например bash, вы можете установить переменную среды следующим образом:

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

Если все это в одной строке, значение среды PYTHONPATH применяется только к этой одной команде.

$ 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

Именно то, что я искал, большое спасибо. По какой-то причине запустить python -c "import sys; sys.path.insert(0,'my/path'); import mymodule"не получилось.
Люк Дэвис,

0

Вы можете попробовать это, чтобы выполнить функцию внутри вашего скрипта

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

-1

Это для окон:

Например, у меня на рабочем столе есть папка mygrapher. Внутри есть папки под названием «вычисления» и «графики», содержащие файлы Python, необходимые моему основному файлу grapherMain.py. Кроме того, grapherMain.py хранится в «графике». Чтобы запустить все без перемещения файлов, я могу сделать пакетный скрипт. Назовем этот командный файл «rungraph.bat».

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

Этот скрипт находится в «mygrapher». Чтобы запустить что-то, я заходил в командную строку и делал:

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

5
и чем это отличается от ответа @ Ismail 'cartman' Dönmez?
Alex Okrushko
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.