Windows中的临时PYTHONPATH [英] Temporary PYTHONPATH in Windows

查看:148
本文介绍了Windows中的临时PYTHONPATH的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



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

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

在Windows中,这种语法不工作,当然。

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

  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'='不在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和put'python'在 sys.argv [i-1] code>在代码中,然后使用 sys.argv [i-1:] 作为subprocess.call的参数)。


How do I set, temporarily, the PYTHONPATH environment variable just before executing a Python script?

In *nix, I can do this:

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

In Windows, this syntax does not work, of course. What is the equivalent, though?

解决方案

To set and restore an environment variable on Windows' command line requires an unfortunately "somewhat torturous" approach...:

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

You could use a little auxiliary Python script to make it less painful, e.g.

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:]))

to be called as, e.g.,

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

(I've coded it so it works for any subprocess, not just a Python script -- if you only care about Python scripts you could omit the second python in the cal and put 'python' in sys.argv[i-1] in the code, then use sys.argv[i-1:] as the argument for subprocess.call).

这篇关于Windows中的临时PYTHONPATH的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆