Python学习之虚拟环境原理详解

目录
  • 认识虚拟环境
  • Python中的虚拟环境工具
  • Virtualenv
  • Treminal 终端演示

该章节我们学习虚拟环境的相关知识,虚拟环境对于刚刚使用Python的初学者来说使用的概率可能会比较低。但是我们依然要对它有一定的了解。

认识虚拟环境

在我们平时的工作环境中,可能会存在一台电脑存在多个版本的 python 的情况 。 比如我们有一个 Python2.7的版本,还有一个 Python3.8的环境,它们两个都存在与我们当前的系统中。这就造成了一个问题,两个版本都在同一个环境下,造成 pip 与第三方包冲突的问题。

为了解决这个问题,我们专门创建一个 Python2.7的虚拟环境 与 Python3.8的虚拟环境环境。Python2.7的环境只有Python 2.7的pip和解释器,而 Python3.8 也可以创建属于自己的环境。

这两个环境独立存在,且互不冲突、互不影响,这就是虚拟环境的作用与目的。我们只需要在各自的虚拟环境中,安装各自需要的软件版本。这些软件与指定的版本也只需要针对当前的虚拟环境,不会影响到其他的虚拟环境。

Python中的虚拟环境工具

python中都有哪些创建虚拟环境的软件:

Virtualenv:一款非常常用的虚拟环境工具。

1、依赖于当前系统中拥有的 Python 版本。

2、使用简便,所以受到大部分的Python爱好者的追捧。

pyenv:与 Virtualenv 同样是创建虚拟环境的工具。

1、不依赖于当前系统的 Python 版本,只要是 Python 拥有的版本,pyenv 都可以在当前电脑创建虚拟环境(先将需要的版本安装在本地,再进行虚拟化操作。)

2、缺点:操作过于复杂,并且也是依赖于 Virtualenv 。我们可以理解为 pyenv 最终还是依赖于 Virtualenv 进行虚拟环境的创建。

由于 pyenv 操作的相对复杂性,所以该章节我们主要介绍的是 Virtualenv 的使用方法,在日后对 python 使用的更加娴熟之后再去关注 pyenv 会更加轻松。

Virtualenv

Virtualenv 也是 Python 的第三方包,与ipython一样也是在命令行终端使用的。

1、通过 pip install virtualenv 进行下载安装。

2、当安装完成之后,我们希望把虚拟环境创建在那个目录下,就需要提前进入到对应的目录文件夹,这也是选择创建 虚拟环境的目录。

3、当进入到选择的文件夹之后,执行 virtualenv -p python3 penv (-p 是选择 python的版本,如果想指定版本号,可以使用 -p python3.6;penv 为指定的虚拟环境的名字)。

4、当在选择的文件夹执行过 virtualenv -p python3 penv 命令后,会在当前目录创建一个 penv 文件夹,就是运行的虚拟环境目录。

5、接下来调用 ./penv/bin/active 来启动虚拟环境;如果是windows环境可以直接 进入到 /penv/bin 目录下,直接执行 active 启动虚拟环境。

6、如果想要退出虚拟环境,直接执行 deactivate 即可退出当前的虚拟环境。

需要注意的是:我们执行的虚拟环境,只在我们当前的 Terminal 终端有效。如果我们开启了多个 Terminal 终端,而且需要每一个都在 虚拟环境中,则需要在每一个 Terminal 终端都执行以上的操作才可以。

Treminal 终端演示

下载安装:pip install virtualenv

安装完成后,我们通过 virtualenv -p python3.10 python3.10_env 命令创建一个名为 python3.10_env 的虚拟环境,同时会在当前路径下发现 对应的 虚拟环境 的文件夹已创建完成,见下图:

接下来我们进入到创建的 python3.10_env 路径下,执行 ./python3.10_env/bin/activate 命令 进入到我们的虚拟环境。这里我遇到了两个问题。

第一个问题:没有可执行权限,报错 zsh: permission denied: ./python3.10_env/bin/activate ,这是因为 用户没有权限,所以才出现了这个错误,所以只需要用chmod修改一下权限就可以了。

第二个问题:在执行 ./python3.10_env/bin/activate 的时候,提示 You must source this script: $ source ./python3.10_env/bin/activate ; 意思是 我必须使用 source ./python3.10_env/bin/activate 这个命令才能执行 python3.10_env 的虚拟环境(因为我用的是Mac的原因,才会出现这个情况,不晓得 WIN电脑会不会有这个情况。)

执行 source ./python3.10_env/bin/activate 尝试执行我们已经安装好的 ipython ,发现无法执行,这是因为我们是虚拟环境。虽然物理环境安装了 ipython ,但是因为我们的虚拟环境是与物理环境完全隔离的,所以 python3.10_env 是一个很干净的环境,并没有 ipython。

再查看一下当前虚拟环境的 python 解释器 ,如下图:

如果需要退出虚拟环境 , 执行 deactivate 。需要注意的是,当退出虚拟环境之后,当前终端所处的环境并不是我们进入 虚拟环境前的环境,而是本地环境,所以如果想要保持之前进入的环境状态,只需要关闭 Terminal 终端,重新进入即可。

在平时的工作中,一台电脑中可能要开发多个项目,但是多个项目可能使用相同的包,但是确实不同的版本。所以如果我们在一个公共的大环境下,就没办法保证一个包的多个版本安装进去,所以我们就可以通过虚拟环境根据每个不同的项目使用不同的包的不同的版本,这样既不互相冲突,又保证了单独项目的独立性与完整性。

到此这篇关于Python学习之虚拟环境原理详解的文章就介绍到这了,更多相关Python虚拟环境内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python中如何使用虚拟环境

    在进行python的开发过程中一直倡导使用虚拟环境来进行项目隔离,这样不会因为python的包不同而导致各种问题,但是以往为了图省事简单,安装包就一直使用pip install 进行全局安装,这样做其实很不好,最近也开始尝试使用虚拟环境来对项目进行隔离开发. 在python中一般情况下有两套方案,一种是使用virtualenv/venv 方式,还有一种是使用pipenv,但是看到网上对于pipenv这个项目有些非议,就目前来说项目的issue和pr很多,但是开发者似乎不太想要对其进行维护,所以还

  • Python 虚拟环境工作原理解析

    目录 简介 使用 激活脚本 工作原理 关于 sys.prefix 总结 其它 Python 的虚拟环境用来创建一个相对独立的执行环境,尤其是一些依赖的三方包,最常见的如不同项目依赖同一个但是不同版本的三方包,而且,在虚拟环境中的安装包不会影响到系统的安装包. 不过,其具体的工作原理是怎样的,这里详细介绍. 简介 几乎每个语言都包含自己的包管理工具,这是一个非常复杂的话题,而不同语言选择的实现又略有区别,都会做一些选择和取舍.而 Python 的包管理解决方案很多,例如 pip.virtualen

  • python 虚拟环境详解

    目录 pipenv 工作流 1 .安装 2.创建虚拟环境 3.管理依赖 4.pycharm设置虚拟环境 总结 pipenv 工作流 Pipenv是基于pip的Python包管理工具,它和pip的用法非常相似,可以看作pip的加强版,它的出现解决了旧的pip+virtualenv+requirements.txt的工作方式的弊端.具体来说,它是pip.Pipfile和Virtualenv的结合体 1 .安装 查看pip版本 pip --version 安装pipenv pip install pi

  • Python 虚拟环境venv详解

    目录 什么是虚拟环境 一句话总结 为什么要虚拟环境 说下背景 了解下第三方库的安装目录 带来的问题 通过 venv 操作虚拟环境 创建虚拟环境 激活虚拟环境 关闭虚拟环境 Pycharm 项目关联新创建的虚拟环境 Python Interpreter 选中虚拟环境 安装项目所需要的库 Pycharm 创建虚拟环境 查看虚拟环境的目录 bin include lib 从虚拟环境生成 requirement.txt 先看看有哪些包 pip freeze 包管理利器 popety 什么是虚拟环境 这是

  • python 虚拟环境的创建与使用方法

    首先我们知道python通过pip安装,那么我们安装的所有东西都会在我们pip下的配置目录下,这会显得非常臃肿,同样也让我们部署艰难. python虚拟环境,他是这样做的,把一些非核心部分分离开,创建新的虚拟环境,这样他们的差异就分开了,形成各自独立的环境. 同样因为python版本不同而形成了不同的差异,通过虚拟环境同样也能解决这个问题. 正文 虚拟环境有两种: 一种是:virtualenv,然后呢有人觉得不舒服,又封装了一下.所以我们只要记住一种就好了. 第一种: 1. pip instal

  • Python虚拟环境venv用法详解

    初衷: 在工作的时候,我们会有很多个项目,每个项目使用的库的版本不一样,导致我们切换项目的时候会很麻烦. 比如:我有两个django项目,项目一使用的版本是 django 1.7 , 项目二使用的版本是 django 2.2.两个项目平时都要维护,如果没有独立的环境,那我每次维护项目一的时候,我就需要安装 django 1.7,维护项目二的时候,我就要安装 django 2.2,这样会很麻烦. 所以我们需要给每个项目建立一个独立的环境,这个时候环境管理就派上用场了,我在维护项目一的时候,只需要使

  • Python学习之虚拟环境原理详解

    目录 认识虚拟环境 Python中的虚拟环境工具 Virtualenv Treminal 终端演示 该章节我们学习虚拟环境的相关知识,虚拟环境对于刚刚使用Python的初学者来说使用的概率可能会比较低.但是我们依然要对它有一定的了解. 认识虚拟环境 在我们平时的工作环境中,可能会存在一台电脑存在多个版本的 python 的情况 . 比如我们有一个 Python2.7的版本,还有一个 Python3.8的环境,它们两个都存在与我们当前的系统中.这就造成了一个问题,两个版本都在同一个环境下,造成 p

  • python super用法及原理详解

    这篇文章主要介绍了python super用法及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 概念 super作为python的内建函数.主要作用如下: 允许我们避免使用基类 跟随多重继承来使用 实例 在单个继承的场景下,一般使用super来调用基类来实现: 下面是一个例子: class Mammal(object): def __init__(self, mammalName): print(mammalName, 'is a wa

  • Python模块future用法原理详解

    这篇文章主要介绍了Python模块future用法原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 计算机的知识太多了,很多东西就是一个使用过程中详细积累的过程.最近遇到了一个很久关于future的问题,踩了坑,这里就做个笔记,免得后续再犯类似错误. future的作用:把下一个新版本的特性导入到当前版本,于是我们就可以在当前版本中测试一些新版本的特性.说的通俗一点,就是你不用更新python的版本,直接加这个模块,就可以使用python

  • Python日志syslog使用原理详解

    这篇文章主要介绍了Python日志syslog使用原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 syslog的官方说明在: https://docs.python.org/2/library/syslog.html#module-syslog 该模块的主要方式为: #!/usr/bin/python # -*- coding: utf-8 -*- import syslog syslog.openlog([ident[, logopt

  • Python定时器线程池原理详解

    这篇文章主要介绍了Python定时器线程池原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 定时器执行循环任务: 知识储备 Timer(interval, function, args=None, kwargs=None) interval ===> 时间间隔 单位为s function ===> 定制执行的函数 使用threading的 Timer 类 start() 为通用的开始执行方法 cancel ()为取消执行的方法 普通单次

  • Python字典底层实现原理详解

    在Python中,字典是通过散列表或说哈希表实现的.字典也被称为关联数组,还称为哈希数组等.也就是说,字典也是一个数组,但数组的索引是键经过哈希函数处理后得到的散列值.哈希函数的目的是使键均匀地分布在数组中,并且可以在内存中以O(1)的时间复杂度进行寻址,从而实现快速查找和修改.哈希表中哈希函数的设计困难在于将数据均匀分布在哈希表中,从而尽量减少哈希碰撞和冲突.由于不同的键可能具有相同的哈希值,即可能出现冲突,高级的哈希函数能够使冲突数目最小化.Python中并不包含这样高级的哈希函数,几个重要

  • python实现高斯模糊及原理详解

    高斯模糊是一种常见的模糊技术,相关知识点有:高斯函数.二维卷积. (一)一维高斯分布函数 一维(连续变量)高斯函数形式如下,高斯函数又称"正态分布函数": μ是分布函数的均值(或者期望),sigma是标准差. 一维高斯分布函数的图形: 从图可知,以x=0为中心,x取值距离中心越近,概率密度函数值越大,距离中心越远,密度函数值越小. (二)二维高斯分布函数 二维高斯分布函数的形式: 特别说明,当变量x和y相互独立时,则相关系数ρ=0,二维高斯分布函数可以简化为: 二维高斯分布函数的图形:

  • Python学习之循环方法详解

    目录 for循环 while循环 拓展:列表推导式 常见的推导式方法 循环的继续与退出(continue与break) continue的使用 break的使用 循环实现九九乘法表 什么是循环? —> 循环是有着周而复始的运动或变化的规律:在 Python 中,循环的操作也叫做 ‘遍历’ . 与现实中一样,Python 中也同样存在着无限循环的 方法与有限循环的方法.接下来我们就先看看有限循环的方法 —> for 循环 for 循环 for 循环的功能:通过 for 关键字将列表.元组.字符串

  • Python学习之面向对象编程详解

    目录 什么是面向对象编程(类) 类的关键字-class 类的定义与使用 类的参数-self self的解析与总结 类的构造函数 构造函数的创建方法 关于对象的生命周期 什么是面向对象编程(类) 利用(面向)对象的(属性和方法)去进行编码的过程即面向对象编程 自定义对象数据类型就是面向对象中的类(class)的概念 类的关键字 - class class 关键字用来声明类,类的名称首字母大写,多单词的情况下每个单词首字母大写(即驼峰命名法).在我们一开始学习 Python 的时候说过,要尽量避免使

  • Python学习之异常断言详解

    该章节我们来学习 异常的最后一个知识点 - 断言 ,断言是判断一个表达式,在表达式为 False 的时候触发异常.表达式我们可以对号入座,可以是条件语句中的声明,也可以是是 while 循环中的声明. 它们都是对一件事情进行 True 或者 False 的判断, 断言 也是如此,断言发现后面的表达式为 False 的时候 就会主动抛出异常. 在 Python 中 assert 就是断言的关键字,乍一听起来 似乎和 raise 关键字 的功能一样.其实 assert 断言的使用要比 raise 更

随机推荐