虚拟环境这玩意最初实在Aonconda上玩耍tensorflow的时候要创建一个tensorflow虚拟环境,当时也不知为什么,后来发现不创建也行,所有到后面我的所有项目都不使用虚拟环境,而是使用全局环境,两年过去了也没发现啥问题,知道两年版之后自己玩耍的项目有点多,pip下载的模块也十分的多,而且很温馨的是pip在安装模块的时候会自动安装依赖的其它模块,但是在卸载的时候就智障的一匹不会卸载之前自动安装的其它依赖模块,然后得用pip show查看依赖关系,狗头分析依赖手动卸载,有的模块如果多个依赖,裂开了,你说不卸载行不行,也不是不可以,就是每次pip list有点多。。。今天在图书馆玩新项目的时候才知道我是时候上手虚拟环境了。
虚拟环境官方定义:virtual environment – 一种采用协作式隔离的运行时环境,允许 Python 用户和应用程序在安装和升级 Python 分发包时不会干扰到同一系统上运行的其他 Python 应用程序的行为。
说白了就是为不同环境(用户)配备不同版本的py和不同的pip包、模块,相互之间的模块、版本就不会发生冲突了。举个例子A项目用pyqt5.12,B项目要5.14,好家伙直接升级到最新的5.14,然后回去测试A项目的时候error一大堆。
项目上用的是pipenv,但是查了py官方文档又是vene,还看到一个帖子说virtualenv,这里就不详细说区别了,请看I’m George
的 一文解读 virtualenv & venv & pipenv 之间的联系与区别。
vene不支持py2,py3.6 版后已移除: pyvenv ( Python 3.3 和 3.4 中创建虚拟环境的推荐工具,不过 在 Python 3.6 中已弃用)。
截至21/01/25,pipenv获得21.5Star,相比之下virtualenv是3.8
文章推荐大家使用pipenv
pip install pipenv
以创建项目fb的虚拟环境为例,在成功创建虚拟环境之后会生成两个文件Pipfile和Pipfile.lock,提交代码时可将其一起提交,这样方便别人和后来的自己再次使用该环境。生产的虚拟环境文件在C:\Users\帅哥.virtualenvs
在虚拟环境里的操作不会影响到主环境,如下面在虚拟环境中安装flask,但是主环境中并没有安装这个包,想起了人工智障实验的sudo和su root的包环境不同引起的实验Error。。。
# 创建工程文件夹、进入工程内
mkdir fb
cd fb
# 创建虚拟环境,如果要指定py版本(不指定就用当前的版本),加上参数和版本号 --python 3.7
pipenv install
# 激活虚拟环境,没有就会创建
pipenv shell
# 搞事情,敲代码,996加班
pipenv install flask # 只是假装摸鱼
pipenv install watchdog --dev # 将看门狗包归类为dev
# 下班,记得commit push哦
# 退出虚拟环境
exit
ps:指定py某版本确保你已经安装了那个版本的py
# 查看帮助
pipenv -h
# 安装包
pipenv isntall "packagename"
# 安装包,归类为开发模式,需要指定dev模式才会安装该模块
pipenv isntall "packagename" --dev
# 卸载包
pipenv uninstall "packagename"
# 卸载所有包
pipenv uninstall --all
# 查看包依赖
pipenv graph
# 生成lockfile
pipenv lock
# 运行py文件
pipenv run python "temp.py"
# 删除当前所指的虚拟环境
pipenv --rm
# 卸载pipenv
pip uninstall pipenv
刚才说过可以用这两文件快速创建相同的虚拟环境,但是这里需要提一点设置这两文件的pip源,由于高墙的存在,pip源还是有必要设置的,相关的更多请查看Python 永修修改pip设置国内默认镜像源,提高下载速度。
总而言之,将这两个文件里面的"sources"的 "url"的值修改为https://pypi.tuna.tsinghua.edu.cn/simple
,当然也可以使用阿里、腾讯的,不过清华离我近一点。。。
pipenv --pypi-mirror https://pypi.tuna.tsinghua.edu.cn/simple
clone别人的代码,例如
it clone [email protected]:greyli/helloflask.git
cd helloflask
pipenv install --dev
如果需要下载dev模式的模块,则需要在install的时候加上--dev
参数。
在创建虚拟环境的时候,如果环境里面本身存在Pipfile,pipenv就会根据pipfile的内容自动安装所需要的包,创建对应的环境
但是有的时候如果只是想run一下里面某个demo,也没有必要装全部的包,需要啥就弄啥
--pypi-mirror
这个选型尝试了几个搭配都不能正常使用。。求指教,官方文档感觉不像个文档。。