Запуск несистемного Python с virtualenv в 32-битном режиме на OS X - PullRequest
11 голосов
/ 05 октября 2011

Краткий вопрос
Можно ли с помощью 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

Решение
Работает с комментариями Шона :

Я добавил псевдоним внутри активатора / деактиватора для сред, которые я хотел запустить как 32-битные.Подробнее см. Ниже.

env_1_32: активировать скрипт

# 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

1 Ответ

6 голосов
/ 05 октября 2011

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

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