Windows中的临时PYTHONPATH

San*_*nta 5 python windows command-line

如何在执行Python脚本之前临时设置PYTHONPATH环境变量?

在*nix中,我可以这样做:

$ PYTHONPATH='.' python scripts/doit.py
Run Code Online (Sandbox Code Playgroud)

在Windows中,当然这种语法不起作用.但是等价物是什么?

Ale*_*lli 8

要在Windows命令行上设置和恢复环境变量,需要一个不幸的"有点折磨"的方法......:

SET SAVE=%PYTHONPATH%
SET PYTHONPATH=.
python scripts/doit.py
SET PYTHONPATH=%SAVE%
Run Code Online (Sandbox Code Playgroud)

您可以使用一些辅助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:]))
Run Code Online (Sandbox Code Playgroud)

被称为,例如,

python withenv.py PYTHONPATH=. python scripts/doit.py
Run Code Online (Sandbox Code Playgroud)

(我编写了它,因此它适用于任何子进程,而不仅仅是Python脚本 - 如果你只关心Python脚本,你可以省略cal中的第二个python并将'python'放入sys.argv[i-1]代码中,然后sys.argv[i-1:]用作subprocess.call的参数).


Mar*_*nen 6

怎么暂时的?如果您打开Windows控制台(cmd.exe),请键入:

set PYTHONPATH=.
Run Code Online (Sandbox Code Playgroud)

将仅更改该控制台的PYTHONPATH以及从中创建的任何子进程.从此控制台运行的任何python脚本都将使用新的PYTHONPATH值.关闭控制台,将忘记更改.