为了给不同工程创建互相独立的运行环境。不同虚拟环境中同一个包可以有不同的版本。虚拟环境数量没有限制,可以创建多个。
一、windows安装virtualenv
1、pip安装vitualenv
2、pip安装虚拟环境管理包virtualenvwrapper-win
3、创建一个存放虚拟环境的目录(如.env)
4、配置环境变量(WORKON_HOME:上面目录的路径)
5、创建虚拟环境 mkvirtualenv [-p python2.7] ,创建完成后自动进入虚拟环境,-P是指定python版本
6、虚拟环境一些命令:
workon:列出所有的虚拟环境
workon [name]:进入指定的虚拟环境
deactivate:退出当前的虚拟环境
mkvirtualenv [name]:创建虚拟环境
rmvirtualenv [name]:删除虚拟环境,不需要限定当前路径
7、虚拟环境里包的管理
直接使用pip install进行安装,缺点是:卸载uninstall后,原来安装的依赖包没有卸载。
如:原先我的envpy3里的安装包有
pip install Flask之后可以看到包列表多了这些
卸载uninstall Flask之后,可以看到依赖包还在
8、requirements.txt文件恢复环境,这里记录了当前程序的所有依赖包及版本号
pip freeze>requirements.txt导出当前环境到requirements.tx
pip install -r requirements.txt 恢复环境
如下,我们恢复envpy3的环境,生成requirements文件,再创建一个虚拟环境,从这个文件里恢复环境。
最终我们看到,新环境里成功恢复了envpy3的环境,还包括了卸载掉了flask的依赖包,这个缺陷在接下来的pipenv得以解决。
二、安装pipenv
pipenv集成了pip、virtualenv两者的功能,pipenv使用Pipfile和Pipfile.lock,前者记录项目依赖包列表,后者记录了固定版本的详细依赖包列表,通过hash算法将包的名称和版本及依赖关系生成哈希值,保证包的完整性。win、linux各平台命令一致。
1、pip intall pipenv,安装完成后可以直接在pycharm里创建
2、修改镜像源,创建完成后我们可以看到项目里多了两个文件,存放依赖包的,lock文件放的信息更详细,我们把url换成国内镜像源快一些(具体百度),如清华:https://pypi.tuna.tsinghua.edu.cn/simple
3、安装包直接使用pipenv install xx,如果想只在开发环境安装后面加--dev
例,我们pipenv install requests和pipenv install flask --dev后,文件里分别显示这样
4、lock文件记录的依赖包的信息非常详细,方便直接部署在服务器恢复环境
比如我们新建一个目录,把刚才的两个文件copy进来,再恢复环境,最开始我们可以看到这个目录下没有虚拟环境,pipenv graph查看当前包,然后我们直接pipenv install
恢复完后再查看一下当前包,可以看到只有requests,因为flask是刚才我们安装的开发环境的包,不会恢复进来的。
如果想恢复dev的环境的包,pipenv install --dev,这时flask也恢复进来了
5、卸载包pipenv uninstall xx,会把lock文件的数据都删除,当你再恢复到其他环境,删除包的相关依赖都不会存在。
这时我们再新建一个目录,把testenv的两个pipfile拷贝过来,再pipenv install 和--dev一下,看看这时恢复过来的环境里只有requests,卸载掉的flask和依赖包都不会恢复,这是跟virtualenv区别的地方。
6、跟virtualenv一样,也可以通过requirements.txt文件恢复
pipenv lock -r --dev > requirements.txt 生成requirements文件
pipenv install -r requirements.txt 通过此文件安装环境
我们还是操作刚才的testenv环境,先生成requirements
再创建一个新目录testnewnew用来安装此文件的环境,最终我们看到requests成功恢复,且删掉的flask及依赖包不恢复。
7、pipenv相关命令
pipenv --where 列出本地工程路径
pipenv --venv 列出虚拟环境路径
pipenv --py 列出虚拟环境的python可执行文件
pipenv graph 查看包依赖
pipenv lock 生成lock文件,比如lock文件被删除了,可以重新生成
pipenv --rm 删除虚拟环境,只能针对当前目录下的虚拟环境,pipfile文件需要手动删
pipenv shell 激活虚拟环境,在当前目录下执行该命令
exit 退出虚拟环境