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

@ İsmail - дякую. Однак як я можу це зробити під час запуску сценарію з мого командного рядка? Я не запускаю Python, імпортую речі та запускаю їх вручну.
орокусакі

На 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,

1
У unsetWindows не існує команди змінної середовища. Натомість додайте a setlocalпісля початкового, echo offі тоді неявно endlocalвідбудеться, коли сценарій .bat закінчиться (і PYTHONPATHбуде відновлено до попереднього значення).
martineau

5
У Windows, якщо ви хочете додати шлях до існуючого PYTHONPATH, ви можете використовувати його set PYTHONPATH=%PYTHONPATH%;%1.
Мартіно

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

В основному sys.path - це список із усіма шляхами пошуку модулів python. Він ініціалізується інтерпретатором. Вміст PYTHONPATH автоматично додається до кінця цього списку.


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

Я використав цю відповідь, щоб запустити нетестований тест за межами IDE pydev-eclipse.
LAL

sys.path.append(r'D:\PyCharmProjects\cheese_shoppe')приклад у Windows.
Bob Stein

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
і чим це відрізняється від відповіді @ İsmail 'cartman' Dönmez?
Олексій Окрушко
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.