2014-11-04 3 views
3

Мне потребовалось навсегда найти это решение, поэтому я хочу, чтобы другие могли его видеть.Вызов скриптов python изнутри python

Я хотел написать скрипт python для создания виртуальных env и установки модулей внутри него. К сожалению, пип не играет хорошо с подпроцесса, как подробно описано здесь: https://github.com/pypa/pip/issues/610

Мой ответ уже на этой теме, но я хотел бы подробно это ниже

ответ

3

В принципе, проблема в том, что Пип по-прежнему с помощью исполняемый исполняемый файл 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, с питоном 3

Эта же проблема может быть легко существовать для многих ситуаций - я буду удалять эту переменную теперь, чтобы предотвращать такое поведение при работе с virtualenv's