Python基础42-虚拟环境(创建/激活/操作/删除-virtualenv、Pycharm、virtualenvwrapper、pipenv)

1 概念

  • 一个独立的局部的 Python 环境
  • 完全模拟系统全局 Python 环境的使用,如安装、卸载包到逻辑操作等

2 作用

  • 让项目运行在一个独立的局部的 Python 环境中,使采用不同环境的项目互不干扰。

3 安装虚拟环境

安装过程中,如果出现如下 error 信息是,可以尝试切换源重新下载
阿里源,不行

$ pip install virtualenv                                                     
Looking in indexes: http://pypi.douban.com/pypi/simple
Collecting virtualenv
  The repository located at pypi.douban.com is not a trusted or secure host and is being ignored. If this repository is available via HTTPS we recommend you use HTTPS instead, otherwise you may silence this warning and allow it anyway with '--trusted-host pypi.douban.com'.
  Could not find a version that satisfies the requirement virtualenv (from versions: )
No matching distribution found for virtualenv

豆瓣源,不行

$ pip install virtualenv --trusted-host pypi.douban.com                      
Looking in indexes: http://pypi.douban.com/pypi/simple
Collecting virtualenv
  Could not find a version that satisfies the requirement virtualenv (from versions: )
No matching distribution found for virtualenv

官方源,不行

$ pip install virtualenv -i https://pypi.python.org/simple/                  
Looking in indexes: https://pypi.python.org/simple/
Collecting virtualenv
  Downloading https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875bc8c2f58071c35d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl (1.9MB)
    4% |█▌                              | 92kB 2.7kB/s eta 0:11:08Exception:
Traceback (most recent call last):
 ....
pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.

清华源,可以

$ pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple/      
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple/
Collecting virtualenv
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/ed/ea/e20b5cbebf45d3096e8138ab74eda139595d827677f38e9dd543e6015bdf/virtualenv-15.2.0-py2.py3-none-any.whl (2.6MB)
    100% |████████████████████████████████| 2.6MB 4.1MB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-15.2.0

4 使用虚拟环境

4.1 创建一个局部的隔离的虚拟环境

4.1.1 创建命令:virtualenv 虚拟环境名称

virtualenv ENV
  • cd 到存放虚拟环境的的地址
  • 执行命令virtualenv ENV,创建名为ENV 的虚拟环境
% cd /Users/xxx/Desktop/testvirtuals                    

% virtualenv virtual1                   
Using base prefix '/usr/local/Cellar/python3/3.6.4_1/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/xxx/Desktop/testvirtuals/virtual1/bin/python3.6
Also creating executable in /Users/xxx/Desktop/testvirtuals/virtual1/bin/python
Installing setuptools, pip, wheel...done.

创建虚拟环境结果


注意:

  • Using base prefix 使用的是3.6版本环境,原因是 virtualenv 安装位置就在3.6下,所以默认使用的是其安装位置版本的 Python 环境
  • 虚拟环境文件包括:Python解析器,包管理工具(setuptools, pip, wheel),三方包等
  • 即使创建的 bin 脚本命令集含有 python 和 python3两个脚本,实际它们的版本都是3.6,这个防止使用者理解不足导致已为使用 python 命令时是使用 Python2.x 版本。
% /Users/xxx/Desktop/testvirtuals/virtual1/bin/python3 --version
Python 3.6.4

% /Users/xxx/Desktop/testvirtuals/virtual1/bin/python --version
Python 3.6.4

4.1.2 指定 Python 版本创建虚拟环境

可选参数:-p
指定 Python2.x 版本创建虚拟环境

virtualenv -p /usr/local/bin/python2.7 testvirtual2

执行效果

$ virtualenv -p /usr/local/bin/python2.7 ENV
Running virtualenv with interpreter /usr/local/bin/python2.7
New python executable in /Users/minyu_leung/Desktop/virtual2/ENV/bin/python2.7
Also creating executable in /Users/minyu_leung/Desktop/virtual2/ENV/bin/python
Installing setuptools, pip, wheel...done.

4.1.3 是否继承系统三方库 --system-site-packages

添加参数--system-site-packages,项目检索库的时候,也会到系统的三方库中找
不添加时,默认只到虚拟环境中查找库

virtualenv --system-site-packages ENV

4.2 激活/退出 虚拟环境

在 Mac 下,激活所创建的虚拟环境步骤:

  1. cd 到虚拟环境文件夹目录
cd /Users/xxx/Desktop/testvirtuals/virtual1
  1. 执行命令 source bin/activate,shell 会打印出已激活的虚拟环境名称
$ source bin/activate
(virtual1)
带 source 命令
  1. 验证当前确实在已激活的虚拟环境中,执行命令 pip --version 和 pip list


    每次打印后都会提示(virtual1),所在环境是虚拟环境
  2. 退出虚拟环境,在激活的虚拟环境中,执行命令 deactivate

$ deactivate
注意,不用带 source 命令
  1. 验证已经退出,执行命令 pip --version 和 pip list


    结果都是来自系统环境
  2. 注意:如果系统是 Windows 的话,则不需要带上 source 命令,直接 cd 进入Scripts脚本文件夹中,然后执行 activate 和 deactivate 脚本即可。与 Mac 不同的是,虚拟环境的 bin 目录下只有 activate 脚本,没有 deactivate 脚本。


    Windows 下的虚拟环境 Scripts 文件夹文件目录
Mac 虚拟环境 bin 目录文件

使用文档中也有说 source 使用原因:

4.3 在激活状态下,操作

  1. 操作三方块
    pip install requests
  2. 执行 py 文件
    python xx.py

以上操作均作用在虚拟环境中。

4.4 删除虚拟环境

  • 直接删除虚拟环境所在目录即

4.5 项目交接

场景:确保共享的项目能够在其他电脑上正常运行
解决:

  1. 方案一:
  • 连同虚拟环境和项目一起拷贝给他人
  1. 方案二:
  • 在虚拟环境中,冻结依赖需求文本
  • 把项目和依赖需求文本给他人
  • 他人在本地创建一个新的虚拟环境,并根据依赖需求文本安装相关库

技能点

  • 虚拟环境的创建
  • 虚拟环境的激活
  • 操作虚拟环境
  • 冻结项目需求文本 pip freeze > requirements.txt
  • 根据需求文本,安装项目依赖库 pip install -r requirements.txt (在激活的虚拟环境中)

5 Pycharm 中使用虚拟环境

  1. 创建项目


  2. 在创建项目时,使用虚拟环境


创建后,目录结构


  1. 在项目偏好设置里可以切换环境和安装需要的库


总结:
IDE 让虚拟环境的使用更加方便,图形化创建和切换,包的管理等。让程序员更关注项目的开发而非各种命令的记忆。

6 虚拟环境进阶使用

6.1 集中式虚拟环境管理

virtualenvwrapper
使用文档

  1. 通过virtualenvwrapper创建的虚拟环境都会统一存放到指定位置统一管理
  2. 方便在多个虚拟环境间切换
  3. 更加方便的去使用 virtualenv
  • 快速创建虚拟环境并激活
mkvirtualenv venv1
  • 快速在多个虚拟环境中切换
workon venv2
  • 快速关闭虚拟环境
deactivate
  • 快速删除虚拟环境
rmvirtualenv env1
  • 查看所有创建的虚拟环境
lsvirtualenv

弊端

  • 只是对 virtualenv 的使用封装,包的安装及虚拟环境的操作依然是分离的。
  • 并未具备对项目包的依赖管理及需求文本的生成操作封装

6.2 更加基于项目的虚拟环境管理

6.2.1 pipenv 使用优点

  1. 推荐使用:pipenv,是 pip + virtualenv 结合体,解决了virtualenvwrapper弊端
  2. 会自动帮你创建虚拟环境,以及安装三方库
  3. 会自动的记录你的项目依赖的所有三方库
  4. 使用 pipfile 和 pipfile.lock取代了 requirements.txt

使用文档
使用文档2

pipenv 命令使用一览


pipenv 命令都是参照项目中的 Pipfile 位置和内容操作的,类似 cocoapods 的 pod 命令参照podfile文件操作。

6.2.2 使用步骤

6.2.2.1 创建虚拟环境

1. cd 到项目文件夹目录下
2. 在该目录下执行命令
pipenv --two # 指定参照Python版本
或
pipenv --three

3. 查看相关信息
查看位置:pipenv --where
查看虚拟环境位置:pipenv --venv
查看解析器信息:pipenv --py

6.2.2.2 激活虚拟环境

pipenv shell

6.2.2.3 在激活状态下操作

  1. 执行 py 文件,python xx.py ,其中 python 指的是虚拟环境 Python版本
  2. 安装包
pipenv install requests

注意:不要使用 pip install 命令,使用的话虽然可以在虚拟环境中安装对应的包,但是不会更新 PIPfile 和 PIPfile.lock

命令:pipenv install [三方库名]
作用:
一、检测当前项目对应的虚拟环境是否存在,不存在则创建。如果当前项目已经存在 Pipfile 和 Pipfile.lock 文件,则参照这两个文件内容创建虚拟环境并安装文件指定的三方库
二、在虚拟环境中安装指定三方库,如果没有指定,则不安装
三、在项目目录下,通过 Pipfile 和 Pipfile.lock 记录当下已经安装的三方库信息

  1. 查看包的依赖结构
pipenv graph
  1. 卸载包
pipenv uninstall requests

6.2.2.4 退出虚拟环境

exit
或
直接关闭 shell 窗口

6.2.2.5 删除虚拟环境

先 cd 进入 Pipfile 文件目录位置
pipenv --rm

6.3 项目交接

6.3.1 上传项目时,应该包含的文件有?

应该包括文件有:

  1. 包和模块源码
  2. Pipfile 和 Pipfile.lock

6.3.2 拿到共享的项目后如何操作?

操作步骤:

  1. cd 进入获取的项目文件夹目录内
  2. 检查项目是否具有Pipfile 和 Pipfile.lock 文件 (此处应该是必须有的,因为是执行上述分享操作的人给你的项目嘛♪(*)啦啦)
  3. 执行命令:
pipenv install
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容