遇到问题:
当最近的开发和部署过程中,多个服务器部署的时候发现对于库和包的管理非常混乱,主要有俩个版本问题:
- 因为业务需要,代码得分别部署在不同的服务器上面,每次部署的时候都得重复的安装包而且不能确定是否跟开发环境中的包版本相同
- 在本地环境下,不同的程序得用到不同版本的库和包,为了防止不同程序之间的混乱
所以需要对环境进行管理,才不会使开发环境和运行环境混乱。
解决问题:
最开始我尝试使用了Virtualenv,之后找到了Virtualenv的延伸工具-----virtualenvwrapper,发现这个让环境管理变的更加的容易。
功能:
- 将所有的虚拟环境整合在一个目录下。
- 管理(新增、移除、复制)所有的虚拟环境。
- 可以使用一个命令切换虚拟环境。
- Tab 补全虚拟环境的名字。
安装:
pip install virtualenvwrapper
使用:
- 列出虚拟环境列表:workon 或者lsvirtualenv
- 新建虚拟环境:mkvirtualenv [虚拟环境名称]
- 启动/切换虚拟环境:workon [虚拟环境名称]
- 删除虚拟环境:rmvirtualenv [虚拟环境名称]
- 离开虚拟环境:deactivate
举例:
新建虚拟环境:
mkvirtualenv Test
终端会显示,虚拟环境的创建过程,创建成功后会自动进入该虚拟环境:
chenxing@Ubuntu:~/project/GamePF/s/init$ mkvirtualenv Test
New python executable in Test/bin/python
Installing setuptools, pip...done.
virtualenvwrapper.user_scripts creating /home/chenxing/.virtualenvs/Test/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/chenxing/.virtualenvs/Test/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/chenxing/.virtualenvs/Test/bin/preactivate
virtualenvwrapper.user_scripts creating /home/chenxing/.virtualenvs/Test/bin/postactivate
virtualenvwrapper.user_scripts creating /home/chenxing/.virtualenvs/Test/bin/get_env_details
(Test)chenxing@Ubuntu:~/project/GamePF/s/init$
之后可以通过上述“使用”中列出的命令进行虚拟环境的操作。
管理实践:
最后当你建立好虚拟环境之后,可以在虚拟环境中安装自己项目所依赖的包,你所安装的包,会在你创建的虚拟环境下面,与外界的开发环境隔离开来,之后你可以通过生成requirements.txt的方式将项目所依赖的所有包以及包的版本写入该文件:
- 将包依赖信息写入requirements.txt中:
pip freeze > requirements.txt
2. 之后可以将该包上传到项目版本管理工具(svn, git)中,服务器拿到代码后,通过requirements.txt进行项目包的下载:
pip install -r requirements.txt
之后如果有什么扩展包的安装,可以通过上述 第1步 和 第2步 的方式对开发环境和部署环境进行很好的管理。