我花了很长时间才找到这个解决方案,所以我希望其他人能够看到它。
我想编写一个python脚本来创建虚拟环境并在其中安装模块。不幸的是,pip与子进程不相配,详见此处: https://github.com/pypa/pip/issues/610
我的答案已经在那个帖子上,但我想在下面详述
答案 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时的这种行为