最近学习django 进行web开发,在deploy程序是碰到一个问题:
服务器环境与本地开发环境不是完全一样, 在本地开发过程中安装一些python django 的第三方包如:PIL ,django-voting,debug-toolbar... 一大推。难道要在服务器上从来再pip install 一次吗?
想不到pip 提供了一个人性化的功能,导出现项目所有的依赖包:
pip freeze >myevn.txt
Brlapi==0.5.4
CouchDB==0.6
Django==1.2.1
Fabric==0.9.2
GnuPGInterface==0.3.2
Mako==0.2.5
MySQL-python==1.2.2
PAM==0.4.2
PIL==1.1.7
Pinax==0.9a1
SQLObject==0.13.0
Scrapy==0.10
Twisted==10.0.0
Twisted-Conch==10.0.0
Twisted-Core==10.0.0
myevn.txt 这个文件 叫需求文件
上传到服务器上 然后
pip install -E site_env
myevn.txt 就可以下载所有依赖的包,并且产生 相应的 virtualenv.
再来解释一下这个
virtualenv 虚拟环境变量
我们有可能同时在开发 A B 两个项目 A 需要 django1.01 B 需要 django1.2.1
但是有可能PYTHONPATH 中我们已经安装了最新版本的django .
virtualenv 为我们很好地解决了这个问题,可以为不同项目创建一个PYTHON 环境。
virtualenv A_ENV
virtualenv --no-site-packages [dev_place] --python=python2.6
source bin/activate
生成以下目录:
-- django_env
|-- bin
| |-- activate
| |-- activate_this.py
| |-- easy_install
| |-- easy_install-2.6
| |-- pip
| `-- python
|-- build
|-- include
| `-- python2.6 -> /usr/include/python2.6
`-- lib
`-- python2.6
然后根据不同的需求 修改对应的包
deactivate 退出该环境
虽然这样做会产生一些磁盘空间的消耗,但是不用再担心各个项目依赖不同版本的包问题了。