Временный PYTHONPATH в Windows

Как я устанавливаю, временно, переменную среды PYTHONPATH прежде, чем выполнить сценарий Python?

В *отклоняют, я могу сделать это:

$ PYTHONPATH='.' python scripts/doit.py

В Windows этот синтаксис не работает, конечно. Каков эквивалент, хотя?

5
задан Santa 25 May 2010 в 01:17
поделиться

4 ответа

Для установки и восстановления переменной окружения в командной строке Windows требуется, к сожалению, "несколько мучительный" подход...:

SET SAVE=%PYTHONPATH%
SET PYTHONPATH=.
python scripts/doit.py
SET PYTHONPATH=%SAVE%

Чтобы сделать это менее болезненным, можно использовать небольшой вспомогательный скрипт Python, например,

import os
import sys
import subprocess

for i, a in enumerate(sys.argv[1:]):
    if '=' not in a: break
    name, _, value = a.partition('=')
    os.environ[name] = value

sys.exit(subprocess.call(sys.argv[i:]))

который будет вызываться, как, например,

python withenv.py PYTHONPATH=. python scripts/doit.py

(Я написал это так, чтобы это работало для любого подпроцесса, а не только для Python-скрипта - если вас интересуют только Python-скрипты, вы можете опустить второй python в cal и поместить 'python' в sys.argv[i-1] в коде, затем использовать sys.argv[i-1:] в качестве аргумента для subprocess.call).

8
ответ дан 18 December 2019 в 10:42
поделиться

В Windows вы можете установить PYTHONPATH как переменную среды, которая имеет интерфейс GUI. В большинстве версий Windows вы можете запустить, щелкнув правой кнопкой мыши «Мой компьютер» и щелкнув правой кнопкой мыши «Свойства».

1
ответ дан 18 December 2019 в 10:42
поделиться

Вы используете SET в Windows:

SET PYTHONPATH=.
python scripts/doit.py
1
ответ дан 18 December 2019 в 10:42
поделиться

Как временно? Если вы откроете консоль Windows (cmd.exe), набрав:

set PYTHONPATH=.

, PYTHONPATH изменится только для этой консоли и всех дочерних процессов, созданных на ее основе. Любые сценарии python, запускаемые с этой консоли, будут использовать новое значение PYTHONPATH. Закройте консоль, и изменение будет забыто.

6
ответ дан 18 December 2019 в 10:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: