从python内部调用python脚本

时间:2014-11-04 23:35:11

标签: python subprocess pip virtualenv

我花了很长时间才找到这个解决方案,所以我希望其他人能够看到它。

我想编写一个python脚本来创建虚拟环境并在其中安装模块。不幸的是,pip与子进程不相配,详见此处: https://github.com/pypa/pip/issues/610

我的答案已经在那个帖子上,但我想在下面详述

1 个答案:

答案 0 :(得分:3)

基本上,问题是pip仍在使用原始python调用的python可执行文件。要解决此问题,您需要从传入的环境变量中删除它。这是解决方案:

#!/usr/bin/python3
import os
import subprocess

python_env_var = {"_", "__PYVENV_LAUNCHER__"}
CMD_ENVIRONMENT = {name: value for (name, value) in os.environ.items() 
                   if name not in python_env_var}  
subprocess.call('./pip install -r requirements.txt', shell=True, 
                env=CMD_ENVIRONMENT)

在Mac,ubuntu 14.04和Windows上使用python 3进行测试

在很多情况下,同样的问题很容易存在 - 我将从现在开始删除这个变量,以防止在处理virtualenv时的这种行为