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可变参数函数用法实例
Jul 07 Python
Python实现excel转sqlite的方法
Jul 17 Python
python中yaml配置文件模块的使用详解
Apr 27 Python
Python实现快速傅里叶变换的方法(FFT)
Jul 21 Python
Python中如何将一个类方法变为多个方法
Dec 30 Python
Python动态导入模块和反射机制详解
Feb 18 Python
使用wxpy实现自动发送微信消息功能
Feb 28 Python
python matplotlib imshow热图坐标替换/映射实例
Mar 14 Python
简单了解Python变量作用域正确使用方法
Jun 12 Python
Python爬虫headers处理及网络超时问题解决方案
Jun 19 Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 Python
pytorch锁死在dataloader(训练时卡死)
May 28 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
利用php来自动调用不同服务器上的flash
2006/10/09 PHP
PHP 采集获取指定网址的内容
2010/01/05 PHP
浅析php与数据库代码开发规范
2013/08/08 PHP
浅析php数据类型转换
2014/01/09 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
2016/12/12 PHP
PHP中模糊查询并关联三个select框
2017/06/19 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
JS网络游戏-(模拟城市webgame)提供的一些例子下载
2007/10/14 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
js css 实现遮罩层覆盖其他页面元素附图
2014/09/22 Javascript
有关json_decode乱码及NULL的问题
2015/10/13 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
原生JS实现图片轮播与淡入效果的简单实例
2016/08/21 Javascript
jquery文字填写自动高度的实现方法
2016/11/07 Javascript
完美解决浏览器跨域的几种方法(汇总)
2017/05/08 Javascript
js读取本地文件的实例
2017/12/22 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
Vue图片浏览组件v-viewer用法分析【支持旋转、缩放、翻转等操作】
2019/11/04 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
Node.js控制台彩色输出的方法与原理实例详解
2019/12/01 Javascript
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
python批量赋值操作实例
2018/10/22 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
使用keras2.0 将Merge层改为函数式
2020/05/23 Python
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
自荐书4要点
2014/01/25 职场文书
迎新春趣味活动方案
2014/08/24 职场文书
学生检讨书
2015/01/27 职场文书
2016年企业安全生产月活动总结
2016/04/06 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书
Win10防火墙白名单怎么设置?Win10添加防火墙白名单方法
2022/04/06 数码科技
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android