问题
python 使用 pip 进行package管理,但当同时进行多个project的开发时,不同的项目对同一个包的要求可能会不一样,这就导致同一个默认的开发环境不能满足需求。
Solution
配置一个基本的最小化的系统级python环境,进行project开发时,为每一个project新建一个虚拟环境,新建的虚拟环境是对系统默认python环境的“复制”,然后在该虚拟环境下为project安装相应的依赖包,每个project在各自的虚拟环境中开发,互相不干扰。
工具
pip 可以让我们安装和卸载包。我们可以指定版本,运行 pip freeze > requirements.txt 来输出一个已安装包列表到一个文本文件,还可以用相同的文本文件配合 pip install -r requirements.txt 来安装一个应用程序需要的所有包。
但pip没有将软件包进行隔离。
但是 pip
并没有包含将软件包彼此隔离的方法。直接使用python3 内置的venv + pip 即可(python2 已停止维护,没必要再去用virtualenv, 虽然virtualenv 也支持python3)。
至于pipenv是个半成品,已经被抛弃。。。
============================================================
至此,的前提是系统安装一个固定的python版本,比如:python3.6.7,然后基于该版本的python创建若干个虚拟环境。
问题来了,当project,需要例外一个版本的python呢?
答:目前的venv + pip 无法解决(当然也不是绝对,手动安装另外一个版本的python也不是不阔以,只是比较麻烦嘛!), 需要借助 anaconda,可以创建指定任意python版本的虚拟环境,进一步(更底层)实现虚拟化。
============================================================
docker则可以是对系统级环境进行进一步的虚拟化,通过编写Dockerfile 可以创建指定任意版本的ubuntu、cuda、anaconda等,属于更为底层的虚拟化。参见https://www.jianshu.com/writer#/notebooks/41683943/notes/58079166
总结
经济实用选择:高版本python3(3.6+) + venv + pip
没GPU,要经常开发不同版本的python的项目:anaconda + pip/conda (不需要venv了)
GPU服务器:docker + anaconda + pip/conda
参考
网友评论