這裡試著簡述如何在*nix下使用 easy_install & virtualenv & pyinstall 來打包工作環境:

*請務必非常小心地對待自己設的 PYTHONPATH 變數,及 .pydistutils.cfg 檔。

首先 easy_install virtualenv (若你還沒這樣做)。目前 virtualenv 最新為 1.3,若非此版,可下 easy_install -U virtualenv 更新。

到要放新環境的資料夾 (此例為 ~/projects),下 virtualenv (給環境一個名稱,此例為 env)
cd ~/projects
virtualenv --no-site-packages env

此時什麼 .pydistutils.cfg 或 PYTHONPATH 等都得清乾淨,若你兩者都沒設就不必管它。
cd ~/projects/env
source bin/activate
easy_install pyinstall
pyinstall.py (...pylons, django ...所有你想要加入新環境的eggs,用法與easy_install類似)

基本上到這就是一般 virtualenv 的用法,只是改用 pyinstall 置換 easy_install。
再來打包整個環境:
pyinstall.py --freeze=env.req (看一下產出的 env.req 跟妳想像中需要裝到的eggs是不是一樣)

pyinstall.py --bundle env.pybundle -r env.req
         ^^^ 為什麼不是 pyinstall?真的很執著…

大功告成。到下一台要佈署的主機上,一樣做 virtualenv env (然後一樣清乾淨PYTHONPATH等變數)
cd env
easy_install pyinstall

把剛剛的 env.pybundle 複製過來,下
pyinstall.py env.pybundle

即可看到這一連串的咒語所施展的魔法。enjoy

Updated: env.bundle 會被 pyinstall 誤認為要下載的 egg,得以 .pybundle 才會被認得。

參考資料:

附上 env.req 在用 pyinstall.py 裝了 Pylons, SQLAlchemy 與 Genshi 後的結果:
Beaker==1.0.2
FormEncode==1.0.1
Genshi==0.5.1
Mako==0.2.2
Paste==1.7.1
PasteDeploy==1.3.2
PasteScript==1.6.3
Pygments==0.11.1
Pylons==0.9.7rc2
Routes==1.10.1
SQLAlchemy==0.5.0rc1
Tempita==0.2
WebError==0.9
WebHelpers==0.6.1
WebOb==0.9.3
decorator==2.3.1
nose==0.10.3
simplejson==2.0.1
wsgiref==0.1.2
*魔蛋圖片為: Tsja! 之 《Heavenly egg》