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