【发布时间】:2015-02-18 00:51:17
【问题描述】:
我正在尝试使用 subprocess.check_call() 在不同的 Python virtualenvs 中启动命令。
要激活 virtualenv(以与 Python 2/3 无关的方式),我只需将我的 virtualenv bin(或 Windows 下的 Scripts)的路径附加到 PATH,然后用这个调用 subprocess.check_call()修改的环境。像这样:
environment = os.environ.copy()
environment['PATH'] = os.pathsep.join([bin_path, environment['PATH']])
subprocess.check_call("pip install -r dev_requirements.txt", env=environment)
但是,我注意到pip 将所有内容安装在系统 Python 站点包中。如果我将check_call() 更改为:
subprocess.check_call("pip install -r dev_requirements.txt", env=environment, shell=True)
然后突然pip 按预期在virtualenv 中运行。
困扰我的是,在两种情况中,运行where pip首先给了我通往virtualenv的pip的路径。
什么可以解释这种奇怪的行为?
【问题讨论】:
标签: python windows subprocess virtualenv