如题, python的辅助工具virtualenv
, 让python的扩展库版本独立, 且不会污染主环境, 最近在用express.js写页面, 也希望能用到类似virtualenv的工具, 没发现一个特别合适的, 于是我的想法是直接装一个node到virtual的bin下面, 额外修改一下环境变量.
在ubuntu 12.04环境下一切正常. 这里虚拟环境路径以virtenv
为例
1. 安装node到虚拟环境(virtenv
).
1.1 直接用的是官网二进制包 (Gohan觉得用二进制包比较方面快速)
# 安装额外工具
$ sudo apt-get install curl
project$ virtualenv virtenv
project$ wget http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-x64.tar.gz
project$ tar zxvf node-v0.10.28-linux-x64.tar.gz
project$ cp -r node-v0.10.28-linux-x64/* virtenv/
project$ rm node-v0.10.28-linux-x64.tar.gz
1.2 直接用源码编译安装
# 编译需要额外安装编译工具
$ sudo apt-get install curl build-essential openssl libssl-dev pkg-config
# 先激活现有的virtualenv环境
project$ . virtualenv virtenv
(virtenv)project$ curl http://nodejs.org/dist/v0.10.28/node-v0.10.28.tar.gz | tar xvz
(virtenv)project$ cd node-v0.10.28
(virtenv)node-v0.10.28$ ./configure --prefix=$VIRTUAL_ENV
(virtenv)node-v0.10.28$ make install
(virtenv)node-v0.10.28$ deactivate
(virtenv)node-v0.10.28$ cd ..
(virtenv)project$ deactivate
# 删掉所有node源码
project$ rm -rf node-v0.10.28/
2. 修改virtualenv的active脚本
为了让virtualenv下的node也能用全局的NODE_PATH环境.
编辑虚拟路径下的active脚本(virtenv/bin/active
)
找到修改virtualenv中PATH的地方
_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH
# 在这里照猫画虎写一段NODE_PATH的重定义
# 如果存在$NODE_PATH, 则追加, 否则直接定义一个NODE_PATH
_OLD_NODE_PATH="$NODE_PATH"
if [ -n "$_OLD_NODE_PATH" ] ; then
NODE_PATH="$VIRTUAL_ENV/lib/node_modules"
else
NODE_PATH="$VIRTUAL_ENV/lib/node_modules:$NODE_PATH"
fi
export NODE_PATH
在deactive()函数中, 找到还原virtualevn中PATH得地方
deactivate () {
# ...
if [ -n "$_OLD_VIRTUAL_PYTHONHOME" ] ; then
PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME"
export PYTHONHOME
unset _OLD_VIRTUAL_PYTHONHOME
fi
# 在这里照猫画虎NODE_PATH的还原
# 如果之前的_OLD_NODE_PATH没有定义, 则不去处理, 否则就还原. 这里我查到了-v的用法, 不确定非bash能不能支持.
if [ -v _OLD_NODE_PATH ] ; then
if [ -n "$_OLD_NODE_PATH" ]; then
NODE_PATH="$_OLD_NODE_PATH"
export NODE_PATH
unset _OLD_NODE_PATH
else
unset NODE_PATH
unset _OLD_NODE_PATH
fi
fi
# ...
}
3. 完事儿
好了, 现在在virtualenv下头可以放心用npm install -g了不用担心环境被污染了.