Python 中如何使用 virtualenv 管理虚拟环境


Posted in Python onJanuary 21, 2021

1. 什么是虚拟环境?

虚拟环境的意义,就如同 虚拟机 一样,它可以实现不同环境中Python依赖包相互独立,互不干扰。

举个例子吧。

假设我们的电脑里有两个项目,他们都用到同一个第三方包,本来一切都顺利。但是由于某种原因,项目B由于某些原因要使用这个第三方包的一些新特性(新版本才有),而如果就这样贸然升级了,对项目A的影响我们无法评估,这个时候我们就特别需要有一种解决方案可以让项目A和B,处于两个不同的Python环境中。互不影响。

为了方便大家对虚拟环境有个认识,我列举了下其优点:

  • 使不同应用开发环境独立
  • 环境升级不影响其他应用,也不会影响全局的python环境
  • 可以防止系统中出现包管理混乱和版本的冲突

市场上管理 Python 版本和环境的工具有很多,这里列举几个:

  • p:非常简单的交互式 python 版本管理工具。
  • pyenv:简单的 Python 版本管理工具。
  • Vex:可以在虚拟环境中执行命令。
  • virtualenv:创建独立 Python 环境的工具。
  • virtualenvwrapper:virtualenv 的一组扩展。

工具很多,但个人认为最好用的,当属 virtualenvwrapper,推荐大家也使用。

2. virtualenv

由于 virtualenvwrapper 是 virtualenv 的一组扩展,所以如果要使用 virtualenvwrapper,就必须先安装 virtualenv。

安装基本使用*

由于virtualenv创建虚拟环境是在当前环境下创建的。所以我们要准备一个专门存放虚拟环境的目录。(以下操作在Linux在完成,windows相对简单,请自行完成,有不明白的请微信与我联系。)

创建

# 准备目录并进入
$ mkdir -p /home/wangbm/Envs
$ cd !$

# 创建虚拟环境(按默认的Python版本)
# 执行完,当前目录下会有一个my_env01的目录
$ virtualenv my_env01

# 你也可以指定版本
$ virtualenv -p /usr/bin/python2.7 my_env01
$ virtualenv -p /usr/bin/python3.6 my_env02

# 你肯定觉得每次都要指定版本,相当麻烦吧?
# 在Linux下,你可以把这个选项写进入环境变量中
$ echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2.7" >> ~/.bashrc

进入/退出

$ cd /home/wangbm/Envs

# 进入
$ source my_env01/bin/activate

# 退出
$ deactivate

删除

删除虚拟环境,只需删除对应的文件夹就行了。并不会影响全局的Python和其他环境。

$ cd /home/wangbm/Envs
$ rm -rf my_env01

注意:
创建的虚拟环境,不会包含原生全局环境的第三方包,其会保证新建虚拟环境的干净。

如果你需要和全局环境使用相同的第三方包。可以使用如下方法:

# 导出依赖包
$ pip freeze > requirements.txt

# 安装依赖包
$ pip install -r requirements.txt

3. virtualenvwrapper

virtualenv 虽然已经相当好用了,可是功能还是不够完善。

你可能也发现了,要进入虚拟环境,必须得牢记之前设置的虚拟环境目录,如果你每次按规矩来,都将环境安装在固定目录下也没啥事。但是很多情况下,人是会懒惰的,到时可能会有很多个虚拟环境散落在系统各处,你将有可能忘记它们的名字或者位置。

还有一点,virtualenv 切换环境需要两步,退出 -> 进入。不够简便。

为了解决这两个问题,virtualenvwrapper就诞生了。

安装

# 安装 - Linux
pip install virtualenvwrapper

# 安装 - Windows
pip install virtualenvwrapper-win

配置

先find一下virtualenvwrapper.sh文件的位置

find / -name virtualenvwrapper.sh
# /usr/bin/virtualenvwrapper.sh

若是 windows 则使用everything 查找 virtualenvwrapper.bat 脚本

D:\Program Files (x86)\Python38-32\Scripts\virtualenvwrapper.bat

在~/.bashrc 文件新增配置

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/workspace
export VIRTUALENVWRAPPER_SCRIPT=/usr/bin/virtualenvwrapper.sh
source /usr/bin/virtualenvwrapper.sh

若是 windows 则新增环境变量:WORKON_HOME

Python 中如何使用 virtualenv 管理虚拟环境

基本语法:

mkvirtualenv [-a project_path] [-i package] [-r requirements_file] [virtualenv options] ENVNAME

常用方法

# 创建
$ mkvirtualenv my_env01

# 进入
$ workon my_env01

# 退出
$ deactivate

# 列出所有的虚拟环境,两种方法
$ workon
$ lsvirtualenv

# 在虚拟环境内直接切换到其他环境
$ workon my_env02

# 删除虚拟环境
$ rmvirtualenv my_env01

其他命令

# 列出帮助文档
$ virtualenvwrapper

# 拷贝虚拟环境
$ cpvirtualenv ENVNAME [TARGETENVNAME]

# 在所有的虚拟环境上执行命令
$ allvirtualenv pip install -U pip

# 删除当前环境的所有第三方包
$ wipeenv

# 进入到当前虚拟环境的目录
$ cdsitepackages

# 进入到当前虚拟环境的site-packages目录
$ cdvirtualenv

# 显示 site-packages 目录中的内容
$ lssitepackages

更多内容,可查看 官方文档
https://virtualenvwrapper.rea...

4. 实战演示

以上内容,是一份使用指南。接下来,一起来看看,如何在项目中使用虚拟环境。

如何使用在我们的开发中使用我们的虚拟环境呢

通常我们使用的场景有如下几种

  • 交互式中
  • PyCharm中
  • 工程中

接下来,我将一一展示。

4.1 交互式中

先对比下,全局环境和虚拟环境的区别,全局环境中有requests包,而虚拟环境中并未安装。
当我们敲入 workon my_env01,前面有my_env01的标识,说明我们已经处在虚拟环境中。后面所有的操作,都将在虚拟环境下执行。

Python 中如何使用 virtualenv 管理虚拟环境

4.2 工程项目中

我们的工程项目,都有一个入口文件,仔细观察,其首行可以指定Python解释器。

倘若我们要在虚拟环境中运行这个项目,只要更改这个文件头部即可。

现在我还是以,import requests 为例,来说明,是否是在虚拟环境下运行的,如果是,则和上面一样,会报错。

文件内容:

#!/root/.virtualenvs/my_env01/bin/python

import requests
print "ok"

运行前,注意添加执行权限。

$ chmod +x ming.py

好了。来执行一下

$ ./ming.py

发现和预期一样,真的报错了。说明我们指定的虚拟环境有效果。

Python 中如何使用 virtualenv 管理虚拟环境

4.3 PyCharm中

点击 File - Settings - Project - Interpreter

Python 中如何使用 virtualenv 管理虚拟环境

点击小齿轮。如图点击添加,按提示添加一个虚拟环境。然后点 OK 就可以使用这个虚拟环境,之后的项目都会在这个虚拟环境下运行。

Python 中如何使用 virtualenv 管理虚拟环境

以上就是Python 中使用 virtualenv 管理虚拟环境的方法的详细内容,更多关于python 用virtualenv 管理虚拟环境的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python实现测试磁盘性能的方法
Mar 12 Python
Python批量更改文件名的实现方法
Oct 29 Python
Python格式化输出%s和%d
May 07 Python
python 检查文件mime类型的方法
Dec 08 Python
浅谈python编译pyc工程--导包问题解决
Mar 20 Python
python实现弹窗祝福效果
Apr 07 Python
Pandas之Fillna填充缺失数据的方法
Jun 25 Python
Python 硬币兑换问题
Jul 29 Python
浅谈django2.0 ForeignKey参数的变化
Aug 06 Python
pandas的to_datetime时间转换使用及学习心得
Aug 11 Python
Python基本语法之运算符功能与用法详解
Oct 22 Python
Python 异步协程函数原理及实例详解
Nov 13 Python
python使用scapy模块实现ARP扫描的过程
Jan 21 #Python
Python3利用scapy局域网实现自动多线程arp扫描功能
Jan 21 #Python
Pandas直接读取sql脚本的方法
Jan 21 #Python
python asyncio 协程库的使用
Jan 21 #Python
python palywright库基本使用
Jan 21 #Python
python Scrapy爬虫框架的使用
Jan 21 #Python
python 可视化库PyG2Plot的使用
Jan 21 #Python
You might like
Email+URL的判断和自动转换函数
2006/10/09 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
解析php中curl_multi的应用
2013/07/17 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
2014/09/27 PHP
php上传文件并存储到mysql数据库的方法
2015/03/16 PHP
php身份证号码检查类实例
2015/06/18 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
2016/03/19 PHP
Redis在Laravel项目中的应用实例详解
2017/08/11 PHP
Laravel下生成验证码的类
2017/11/15 PHP
对textarea框的代码调试,而且功能上使用非常方便,酷
2006/06/30 Javascript
IE6下js通过css隐藏select的一个bug
2010/08/16 Javascript
Jquery 获取checkbox的checked问题
2011/11/16 Javascript
Jquery动态添加及删除页面节点元素示例代码
2014/06/16 Javascript
javascript控制层显示或隐藏的方法
2015/07/22 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
AngularJS constant和value区别详解
2017/02/28 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
详解vue组件基础
2018/05/04 Javascript
实例讲解JavaScript预编译流程
2019/01/24 Javascript
深入了解Vue.js 混入(mixins)
2020/07/23 Javascript
python采集博客中上传的QQ截图文件
2014/07/18 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
2017/08/07 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
python实现一组典型数据格式转换
2018/12/15 Python
Python List cmp()知识点总结
2019/02/18 Python
Python版中国省市经纬度
2020/02/11 Python
css3实现二维码扫描特效的示例
2020/10/29 HTML / CSS
高级3D打印市场:Gambody
2019/12/26 全球购物
怎样有效的进行自我评价
2013/10/06 职场文书
2014年标准化工作总结
2014/12/17 职场文书
紧急通知
2015/04/17 职场文书
我的中国梦主题班会
2015/08/14 职场文书
早恋主题班会
2015/08/14 职场文书
JavaScript实现班级抽签小程序
2021/05/19 Javascript
python双向链表实例详解
2022/05/25 Python