在OS X上以32位模式运行带有virtualenv的非系统Python

时间:2011-10-05 15:34:34

标签: python macos virtualenv virtualenvwrapper

简短问题
使用virtualenv / virtualenvwrapper是否可以为链接到特定虚拟环境的python调用添加前缀?

背景
我想使用brew installed Python 2.7拥有多个虚拟环境,但有些运行在64位模式,其他运行在32位模式。

下面我有我的OS X开发的典型设置。我要添加到python调用的特定前缀是arch -i386,以强制python以32位模式运行。同样,最重要的部分是在调用workon env32后将仅添加 (如示例所示)。我知道我可以在.bash_profile中设置一个别名,但每次创建/删除虚拟环境时都必须对其进行修改。

修改
要详细说明我使用简单别名时遇到的问题,可能会有超过1个32位的虚拟环境。话虽如此,对workon的调用理想情况下会将前缀添加到python调用,因此终端的工作流程将是相同的。调用workon env_x_32后的含义我可以使用pythonarch -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的评论运行:

我在activate / deactivate中为我想要以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 个答案:

答案 0 :(得分:6)

为您的激活脚本添加别名,并激活您想要使用它的每种类型的virtualenv。

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