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.