简短问题
使用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
后的含义我可以使用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的评论运行:
我在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
答案 0 :(得分:6)
为您的激活脚本添加别名,并激活您想要使用它的每种类型的virtualenv。
$ cd env32
$ echo "alias python='arch -i386 python'" >> bin/activate
$ source bin/activate
$ python myscript.py