一、引言
最近在学习《Flask Web Development 2nd Edition》的时候,作者开篇就介绍如何使用 venv 来管理 Python 环境 。
自我觉得作者讲的非常好,想要将其总结下来,方便自己日后查询,也方便各位学习 Python 的同学一起学习。

众所周知,项目的环境管理一直是比较头疼的问题,如果有两个项目,一个用的是 a 库的 v1 版本,一个用的是 a 库的 v2 版本,那么如果 a 库是安装在系统环境下的,就会出现项目所依赖的库文件版本不对的问题。

Python 社区为了解决这个问题,提出了虚拟环境的概念。也就是人为的创建一个虚拟环境供项目运行,而该项目需要什么库文件,则自行在这个虚拟环境中下载安装,而在虚拟环境中下载安装的库文件,是不会影响到系统环境中的库文件的。
有了虚拟环境的概念, Python 的项目管理也就不那么麻烦了。

接下来,我来总结下如何使用 Python 的虚拟环境。

ps: 以下的讲解都是在 Python3 的前提之下。

二、venv
鉴于 Python3 中以标准库的形式包含了 venv 工具,因此就不再讲解 venv 工具的安装了。

不过 Ubuntu 环境是需要自行下载安装的,运行命令如下:

$ sudo apt-get install python3-venv
1
1. 创建虚拟环境
这里,假定你已经拥有了 venv 工具,我们直接打开命令行工具

Windows 平台下运行:

py -3 -m venv venv 或 python -m venv venv
1
MacOS 或者 Linux 平台下运行:

python3 -m venv venv
1
运行完这行命令,应该可以在当前目录下看到新建的一个文件夹,名为 venv,其就是虚拟环境的名称,并且以后我们在虚拟环境中所有的操作以及下载的库文件,都会在这个文件夹中。

2. 激活虚拟环境
创建了虚拟环境却没有激活的话,你还是处于系统环境中。怎么激活虚拟环境呢?

Windows 平台下运行:

venv\Scripts\activate 或 cd venv\Scripts | activate
1
MacOS 或者 Linux 平台下运行:

source venv/bin/activate
1
这里 venv 是你的虚拟环境的名字。运行完之后,自动会刷新命令行界面,以括号内嵌虚拟环境名字的形式提示用户,现在是处于 venv 虚拟环境中。

3. 使用虚拟环境
虚拟环境除了 Python 一些核心的包、pip 工具等等,其他都没有,因此,当前项目需要什么,则使用 pip 工具下载即可。

其他的使用方法,与系统环境下的使用没有什么不同。

4. 退出虚拟环境
退出虚拟环境很简单,各平台都是一样的:

deactivate
1
从虚拟环境中退出到系统环境是很明显的,因为前面的虚拟环境名称提示符消失了。

三、在 PyCharm 中配置当前项目虚拟环境
venv 是很好用,但是我们该如何在 PyCharm 中配置当前项目所使用的环境呢?
1. 进入 Project Interpreter 界面
我们打开 PyCharm,菜单栏选择 File,点击 Settings,进入到设置界面,然后配置 Project Interpreter

2. 添加虚拟环境
在 Project Interpreter 文本框右侧点击齿轮按钮,点击 Add。

然后,选择 Virtualenv Environment 标签卡,选择 Existing enviroment(选择上面那个应该可以直接新建一个环境,这里为了续接上一节中的环境,则直接选择了已存在的环境),这里,如果 PyCharm 没有找到你新建的环境,则需要你自己去打开文件找到你虚拟环境中的 Scripts 目录下的 python.exe 解释器文件。
3. 测试运行
最后点击 OK,即可看到环境列表多了一行。这里,我们可以在项目中切换各个环境进行自己当前项目的测试,还是很方便的。

四、总结
不得不说,venv 还是给了我不少的惊喜。也就像《Flask Web Development 2nd Edition》的作者所说的:

在系统环境中,使用最基本的 Python 解释器提供虚拟环境 venv
的功能,然后在各个虚拟环境中完成我们的项目,这样是比较好的项目组织方式

上述话语是意译,我也比较认可作者的这一个看法,这样能让我们的系统环境非常的干净,却又能够非常好的管理各个项目。

不过同样的话,《Head First Python 2nd Edition》的作者也说过:

虚拟环境 venv的使用--(venv 一)的更多相关文章

  1. pycharm如何关闭虚拟环境(即取消venv命令行)

    venv命令行 是虚拟环境特有, 为什么要使用虚拟环境: 在实际项目开发中,我们通常会根据自己的需求去下载各种相应的框架库,如Scrapy.Beautiful Soup等,但是可能每个项目使用的框架库 ...

  2. Python3 venv 创建虚拟环境

    简介 Python3.3以上的版本通过venv模块原生支持虚拟环境,可以代替Python之前的virtualenv. 该venv模块提供了创建轻量级"虚拟环境",提供与系统Pyth ...

  3. Python3的venv虚拟环境操作(Linux)

    Infi-chu: http://www.cnblogs.com/Infi-chu/ Python3.3以上版本支持了原生的虚拟环境命令,即venv. 长话短说,具体的理论在这里就不多说了,主要的操作 ...

  4. python 虚拟环境 venv 简单用法

    Python3.3以上的版本通过venv模块原生支持虚拟环境,可以代替Python之前的virtualenv.该venv模块提供了创建轻量级“虚拟环境”,提供与系统Python的隔离支持.每一个虚拟环 ...

  5. 虚拟环境及venv和virtualenv

    一.虚拟环境概述 Python应用程序通常会使用不在标准库内的软件包和模块.应用程序有时需要特定版本的库,修复特定的错误,或者可以使用库的过时版本的接口编写应用程序. 这说明一个Python安装可能无 ...

  6. python虚拟环境和venv的使用

    目录 1.环境与虚拟环境 2.查看帮助 3.--system-site-package 命令 4.创建虚拟环境 5.激活/关闭虚拟环境 6.保存和复制虚拟环境 7.改变虚拟环境所指向的真实python ...

  7. python 3.6 的 venv 模块

    今天,在在使用 pycharm 的使用,进行创建 python的时候,发现使用默认的创建的选项使用的python 3环境 .而我系统默认的python环境是 python 2.7 环境:这就引起了我的 ...

  8. python多环境管理一(venv与virtualenv)

    一.背景 我们经常会遇见这样的场景: 1.各个项目使用的python版本不相同 由于Python的解释器版本众多,各版本之间差异非常大.特别是python2和python3,互不兼容. 有些项目可能用 ...

  9. python 虚拟环境

    python3 目录venv创建为虚拟环境,并激活. $ python3 -m venv ./venv$ source venv/bin/activate -m: -m mod : run libra ...

  10. Python 中的虚拟环境

    检查系统是否安装了virtualenv: $ virtualenv --version 创建虚拟环境venv(名字可以随便取,一般为venv): $ virtualenv venv 使用虚拟环境ven ...

随机推荐

  1. elm上传图片,只能上传一张,隐藏+上传框

    效果: 上传后,隐藏+号,禁止继续上传: 移除当前已上传的后,重新显示+号,可以继续上传: 代码: css : 隐藏上传的 + 号 变量: 注: 利用 hideUpload 控制 + 号的css   ...

  2. SQL Server创建表,存储过程,function函数脚本规范

    --创建新表 /**************************************************************************************** *** ...

  3. vscode提交修改的时候报错:无法推送 refs 到远端。您可以试着运行“拉取”功能,整合您的更改

    vscode提交修改的时候报错:无法推送 refs 到远端.您可以试着运行"拉取"功能,整合您的更改, git操作命令行 git pull origin yourbranch  - ...

  4. 使用signalr不使用连接服务器和前台的js的方法

    1:使用这种方式,,就不需要前后台链接的js 2:新建一个empty的MVC项目 3:新建一个controller和index.html 4: 新建一个signalr 集线器类名为PersonHub, ...

  5. Java输入输出格式

    一.输入字符串 Scanner in=new Scanner(System.in); String str1=in.next(); //输入一个字符串,以空格或回车结束 String str2=in. ...

  6. mysql之数据类型-第三篇

    mysql数据库中的每个列都应该有适当的数据类型,用于限制或允许该列中存储的数据.mysql的数据类型分别有整数,浮点数和定点数类型,日期和时间类型,字符串类型和二进制类型等. 整数类型 数值型数据类 ...

  7. Pytest+allure+requests接口自动化

    实现功能 测试数据隔离: 测试前后进行数据库备份/还原 接口直接的数据依赖: 需要B接口使用A接口响应中的某个字段作为参数 对接数据库: 讲数据库的查询结果可直接用于断言操作 动态多断言: 可(多个) ...

  8. js 导出json文件

    var data={}//处理得到的json字符串 var filename = 'json.json'//json文件名 if(typeof data === 'object'){ ddd = JS ...

  9. python 浮点除法

    昨天晚上久违地去打了次div2 一年没打,挂得很惨 早上起来试着用python写一遍唯一写出来的a题 然后发现了一个奇怪的现象 代码如下(为了方便观察已经改过了,不是解题的代码) import sys ...

  10. Vue-数据代理

    Vue中的数据代理 数据代理定义 所谓数据代理,就是通过一个对象代理对另一个对象中的属性的操作(读/写).说白了就是操作一个对象上的属性可以读取和修改另一个对象上的属性,这种关系就叫做数据代理. 在V ...