Подтвердить что ты не робот

Запуск несистемного Python с virtualenv в 32-битном режиме на OS X

Короткий вопрос
С помощью 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
4b9b3361

Ответ 1

Добавление псевдонима к вашему активированию script и активация вашего виртуального файла каждого типа, который вы хотите использовать.

$ cd env32
$ echo "alias python='arch -i386 python'" >> bin/activate
$ source bin/activate
$ python myscript.py