Заставьте virtualenvwrapper использовать brew-ed python вместо системного python в OS X 10.9.

Вопрос

Почему $ mkvirtualenv test использует системный python (v2.7.6) вместо brew-ed python (2.7.8) и как мне настроить virtualenvwrapper для использования нужного python?

Настройка системы

Я использую OS X 10.9.5 с домашней установкой python (v2.7.8). У меня есть общесистемная установка virtualenv и virtualenvwrapper. Моя оболочка - это ZSH через oh-my-zsh с использованием плагина virtualenvwrapper (хотя я пытался вручную вытащить плагин и найти virtualenvwrapper.sh, и я получаю такое же поведение).

Демо

Это 2.7.8 - интерпретатор Python, который я получаю из оболочки.

$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

$ which python
/usr/local/bin/python

$ python
Python 2.7.8 (default, Aug 24 2014, 21:26:19)
...

У меня есть следующая среда, установленная в верхней части моего .zshrc (до того, как будет получен файл virtualenvwrapper), и я сопоставил их все с выводом $ printenv, чтобы подтвердить, что они устанавливаются правильно.

export PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin"

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Projects/Python
# this is the location shown above to be v2.7.8
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python 
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv 
export PIP_DOWNLOAD_CACHE=$HOME/.pip/download_cache
export PIP_VIRTUALENV_BASE=$WORKON_HOME

Несмотря на правильный $PATH и явное переопределение для использования интерпретатора python, я знаю, что это версия 2.7.8, любой mkproject получает системный python по умолчанию:

$ mkvirtualenv test
....

(test)$ python
Python 2.7.6 (default, Mar 18 2014, 15:05:23)
...

Обходной путь

Я нашел приводящую в бешенство (в том смысле, что кажется, что это ничего не меняет, но ничего не делает) обходной путь

$ mkvirtualenv -p `which python` test
...

(test)$ python
Python 2.7.8 (default, Aug 24 2014, 21:26:19)
...

Так почему же эти переменные среды не используются, несмотря на то, что они установлены, и у них есть явная возможность работать, как показано в обходном пути ??


person Finn    schedule 21.09.2014    source источник
comment
Как вы установили сам virtualenv? В моей системе сценарий virtualenv имеет шебанг /usr/bin/python, что может объяснить вашу проблему. Может быть, попробовать удалить это и переустановить через brew?   -  person Daniel Roseman    schedule 22.09.2014
comment
@DanielRoseman Похоже, так оно и было. Являются ли все эти различные переменные окружения просто плацебо?   -  person Finn    schedule 23.09.2014


Ответы (1)


По умолчанию virtualenv будет использовать двоичный файл python, с которым он был установлен, а не двоичный файл python, который отображается первым в пути.

virtualenv --help
...
  -p PYTHON_EXE, --python=PYTHON_EXE
                        The Python interpreter to use, e.g.,
                        --python=python2.5 will use the python2.5 interpreter
                        to create the new environment.  The default is the
                        interpreter that virtualenv was installed with
                        (/usr/bin/python)

Лучше всего, вероятно, удалить virtualenvwrapper, а затем переустановить его с помощью pip, живущего в каталоге установки вашего сваренного Python.

person vgel    schedule 21.09.2014
comment
справка virtualenvwrapper показывает интерпретатор 2.7.8 - person Finn; 23.09.2014