Короткий вопрос
С помощью virtualenv/virtualenvwrapper можно добавить префикс для вызова python
, связанного с конкретной виртуальной средой?
Фон
Я хотел бы иметь несколько виртуальных окружений с помощью brew установлен Python 2.7, но некоторые из них работают в режиме 64 бит и 32-битном режиме.
Ниже у меня есть типичная настройка для моей разработки OS X. Конкретным префиксом, который я хотел бы добавить в вызов python
, является arch -i386
, чтобы заставить python работать как 32-битный режим. И снова самая важная его часть заключается в том, что она будет добавлена только после вызова workon env32
(как показано на примере). Я знаю, что могу настроить псевдоним в моем .bash_profile, но это нужно будет изменять каждый раз, когда я создаю/удаляю виртуальные среды.
ИЗМЕНИТЬ
Чтобы подробнее рассказать о проблемах, связанных с простым псевдонимом, может быть более 1 32-битной виртуальной среды. При этом вызов workon
идеально добавит префикс к вызову python
, поэтому рабочий процесс на терминале будет таким же. Значение после вызова workon env_x_32
я мог бы просто использовать python
, а arch -i386
был бы прозрачным для меня при использовании терминала.
Установка Python:
> brew install python --framework --universal
Создание виртуальных сред (после установки pip, virtualenv и virtualenvwrapper):
> mkvirtualenv env_1_64 --no-site-packages
> mkvirtualenv env_1_32 --no-site-packages
> mkvirtualenv env_2_64 --no-site-packages
> mkvirtualenv env_2_32 --no-site-packages
64-разрядное использование:
> workon env_1_64
> python myscript.py
> workon env_2_64
> python my_other_project_script.py
32-разрядное использование: (текущий/неидеальный)
> workon env_1_32
> arch -i386 python myscript.py
> workon env_2_32
> arch -i386 python my_other_project_script.py
32-битное использование: (Идеально)
> workon env_1_32
> python my_32bit_project.py # Note that the arch -i386 would be transparent
Решение
Запуск с комментариями Sean:
Я добавил псевдоним внутри активации/деактивации для сред, которые я хотел запустить как 32 бит. Подробнее см. Ниже.
env_1_32: активировать script
# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly
deactivate () {
alias python='python' # <---- Added this line
# reset old environment variables
if [ -n "$_OLD_VIRTUAL_PATH" ] ; then
PATH="$_OLD_VIRTUAL_PATH"
export PATH
unset _OLD_VIRTUAL_PATH
fi
# ****** Removed Content to keep the post shorter*********
}
# unset irrelavent variables
deactivate nondestructive
VIRTUAL_ENV="/Users/Adam/.envs/env_1_32"
export VIRTUAL_ENV
# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "$BASH" -o -n "$ZSH_VERSION" ] ; then
hash -r
fi
# ****** Removed Content to keep the post shorter*********
alias python='arch -i386 python' # <---- Added this line to run as 32bit