简介
why
虚拟环境这玩意最初实在Aonconda上玩耍tensorflow的时候要创建一个tensorflow虚拟环境,当时也不知为什么,后来发现不创建也行,所有到后面我的所有项目都不使用虚拟环境,而是使用全局环境,两年过去了也没发现啥问题,知道两年版之后自己玩耍的项目有点多,pip下载的模块也十分的多,而且很温馨的是pip在安装模块的时候会自动安装依赖的其它模块,但是在卸载的时候就智障的一匹不会卸载之前自动安装的其它依赖模块,然后得用pip show查看依赖关系,狗头分析依赖手动卸载,有的模块如果多个依赖,裂开了,你说不卸载行不行,也不是不可以,就是每次pip list有点多。。。今天在图书馆玩新项目的时候才知道我是时候上手虚拟环境了。
what
虚拟环境官方定义: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
pipenv使用
my Env
- win10 amd64
- py 3.9.0
- pip 20.3.3
install
pip install pipenv
linux
win10安装上面的办法安装没啥毛病,就是Linux下会设计PATH问题,如图所示:
当你想使用的时候:
$ pipenv insall
bash: pipenv:未找到命令
解决办法
打开.bashrc(在主目录设置显示隐藏文件才能看到)
在最末尾添加(注释用#开头),具体路径看提示了啥,别shh复制
export PATH="home/kearney/.local/bin:$PATH"
保存即可。
usage
以创建项目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
在虚拟环境里虽然可以使用pip Install,但是这样无法跟踪和记录,so 别用它
more option
# 查看帮助
pipenv -h
# 安装包
pipenv isntall "packagename"
# 安装包,归类为开发模式,需要指定dev模式才会安装该模块
pipenv isntall "packagename" --dev
# 使用python2创建环境
pipenv --two
# 使用python3创建环境
pipenv --three
# 指定某个Python版本创建环境
pipenv --python 3.7
# 指定某个位置的Python创建环境
pipenv --python <path/to/python>
# 卸载包
pipenv uninstall "packagename"
# 卸载所有包
pipenv uninstall --all
# 查看包依赖
pipenv graph
# 生成lockfile
pipenv lock
# 运行py文件
pipenv run python "temp.py"
# 删除当前所指的虚拟环境
pipenv --rm
# 卸载pipenv
pip uninstall pipenv
这里我发现一个问题就是其实我并不想写死py版本,高于3就好了,标配都是3.6、3.7啥的,所以我想知道py版本大于三即可,但是我使用pipenv --three
还是会以我当前的版本构建,根据Pipenv的python版本问题 - 李辉中的回答剩下一种办法就是删除两个pipfile中的require中的python部分了,昨晚测试了确实有效。但是目的并没有有效的解决,指定py版本>3的问题
Pipfile source
刚才说过可以用这两文件快速创建相同的虚拟环境,但是这里需要提一点设置这两文件的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 git@github.com:greyli/helloflask.git
cd helloflask
pipenv install --dev
如果需要下载dev模式的模块,则需要在install的时候加上--dev
参数。
在创建虚拟环境的时候,如果环境里面本身存在Pipfile,pipenv就会根据pipfile的内容自动安装所需要的包,创建对应的环境
但是有的时候如果只是想run一下里面某个demo,也没有必要装全部的包,需要啥就弄啥
这里后面我遇到一个问题就是我的py版本有26和37,但是pipfile里面是39咋办,这个时候可以安装3再来或者我就想用37也不是不行
pipenv install --python 3.7
# 或者指定路径
pipenv install --python /usr/bin/python3.7
没有提示符的问题
吐槽csdn以及发布的文章不能暂存修改草稿。。,解决办法看 [解决]Win10 VS Code pipenv无法加载文件Scripts\Activate.ps1,因为在此系统上禁止运行脚本-更改执行策略 - Kearney
Q&A
--pypi-mirror
这个选型尝试了几个搭配都不能正常使用。。求指教,官方文档感觉不像个文档。。