当前位置: 首页 > news >正文

conda和Python的虚拟环境如何结合使用,以及二者之间到底有什么区别?

问题描述

        今天在复现streamlit的代码时(参考Streamlit 讲解专栏(一):安装以及初步应用),根据这篇博文指导,要先用以下指令创建一个虚拟环境:

# 创建虚拟环境(使用venv)
python -m venv streamlit_env# 激活虚拟环境(Windows上)
streamlit_env\Scripts\activate.bat# 激活虚拟环境(Linux / macOS上)
source streamlit_env/bin/activate

         于是出现了这个效果:

        但在就在这最开始的环境设置上就遇到了一个问题:为什么要用python创建一个虚拟环境呢?在之前不都是用conda创建虚拟环境吗?那二者有什么区别呢?

探寻之路:python虚拟环境

        python虚拟环境是什么?简单来说,Python虚拟环境是一种工具,用于在同一计算机上管理多个Python项目,每个项目都可以拥有自己独立的Python解释器和依赖项,而不会干扰其他项目。虚拟环境允许开发人员在不同项目之间隔离Python库和依赖项,以确保项目之间的独立性和可维护性。

Python虚拟环境的主要目的包括:

  1. 隔离依赖项:每个虚拟环境都有自己的Python解释器和包安装目录,因此您可以为每个项目选择特定的Python版本和依赖项版本,而不会影响其他项目。

  2. 避免依赖冲突:在不同的项目中使用不同版本的Python库和包时,可以避免依赖冲突,因为它们被隔离在各自的虚拟环境中。

  3. 提高可维护性:虚拟环境使项目的依赖项清晰可见,有助于更轻松地管理项目的依赖项并确保可维护性。

  4. 兼容性:不同的项目可能需要不同版本的Python或依赖项,虚拟环境允许您灵活地管理这些要求。

Python虚拟环境通常是通过以下工具创建和管理的:

  1. venv(在Python 3.3及更高版本中可用):Python标准库中的venv模块可以用来创建和管理虚拟环境。

  2. virtualenv:这是一个第三方工具,用于创建和管理Python虚拟环境。它兼容Python 2.x 和 3.x 版本。

  3. conda:这是一个流行的开源工具,用于数据科学和机器学习项目的环境管理。它可以创建Python虚拟环境,并且还可以管理非Python软件包。

通过创建虚拟环境,开发人员可以更轻松地管理复杂的Python项目,确保项目之间的隔离性,同时简化依赖项管理和项目部署。

         看的出来,python虚拟环境的创建也是可以用conda来实现的,换句话说,conda创建虚拟环境的时候同时也会创建一个一个python的虚拟环境(注:在这里面是指和系统python环境不冲突的环境),循着这个思路,我们再来想一下什么是conda虚拟环境?

        更详细的可以参考这篇博文:

一文掌握Python虚拟环境-提升你的开发效率icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/594114976?utm_id=0

继续思考:conda虚拟环境

        conda虚拟环境是什么?简单来说,Conda虚拟环境是一种通过Conda工具创建和管理的Python虚拟环境。Conda是一个开源的包管理和环境管理工具,通常与Anaconda或Miniconda发行版一起使用,用于管理Python和非Python软件包,以及它们的依赖关系。Conda虚拟环境允许用户在同一计算机上创建多个独立的Python环境,每个环境都有自己的Python解释器和包集合,以便进行不同项目的开发和部署。

Conda虚拟环境的主要目的包括:

  1. 依赖隔离:每个Conda虚拟环境都具有独立的Python解释器和包管理系统,使得不同项目可以使用不同版本的Python和依赖项,而不会互相干扰。

  2. 依赖管理:Conda允许用户轻松创建、安装、更新和删除依赖项,包括Python库以及非Python软件包,这有助于确保项目所需的依赖项可用和一致。

  3. 跨平台兼容性:Conda虚拟环境可以在不同操作系统上使用,确保项目在不同平台上的一致性。

  4. 环境复制:通过创建Conda环境的克隆或副本,用户可以快速复制整个环境,以便在不同地方重现相同的工作环境。

Conda虚拟环境通常通过以下方式创建和管理:

  1. conda create命令:使用conda create命令可以创建新的Conda虚拟环境,用户可以指定Python版本和安装的包。

  2. conda activateconda deactivate命令:用于激活和停用Conda虚拟环境,以切换不同的环境。

  3. conda env exportconda env create命令:用于导出和创建Conda虚拟环境的环境配置文件,以便在不同计算机上共享和重建环境。

Conda虚拟环境使得在复杂的数据科学和科学计算项目中更轻松地管理依赖关系,同时确保项目的独立性和可重复性。它是一种非常有用的工具,特别适用于需要使用多个Python环境和非Python依赖项的应用程序。

        因为conda虚拟环境用的比较多,所以在这里就不在详细说明了,但是有一篇博客把虚拟环境的实际用处总结的很到位,我很喜欢这个例子:

        企业很多时候我们会面对同时开发多个项目,那这些项目很有可能会使用不同的Python环境来去运行啊,那这里面有的Python环境可能是需要3.5的Python,有的Python环境它需要3.6的版本,有的Python环境它可能需要3.7的版本等等的,那这个时候我们就通过创建不同版本的这个Python到虚拟环境里面,然后去给不同的项目啊提供它所需要的一个运行环境。

        那有的人说,那如果我们都是同一个版本的Python呢,我们的多个项目只需要同一个版本的Python呢?那这个时候我们去创建conda虚拟环境,是不是没必要了?

        其实也是很有必要的,因为你可能有的项目用的比如说pytorch去来开发的,有的项目比如说用的是testflow来去开发的,那不同的框架,它对于底层的这个Python包的依赖,或者说对于底层的一些库的依赖,它是不一样的,那这个时候它很有可能会起冲突。

        那我们如果是不同的项目,使用同一个环境啊,那这里面呢,我们如果这个有的项目使用pytorch,那我们需要去安装pytorch,那有的时候我们需要去就是有的项目我们需要在这个环境里面去使用testflow,我们再安装testflow,那有可能他在安装testflow的时候就把pytorch配套所需要的一些依赖给更新了,那回头再去跑的时候,很有可能就跑不起来啊,所以说这里面咱们最好是给它隔离开啊,这样的话呢,就相当于各回各家,各找各妈。

        这样的话,我们的项目呢,即使你后面再有一些新的项目需要更新版本的环境,那你前面的一些老的项目呢,也能去找到它自己的环境来去跑起来

        具体的可以参照这篇博文:

Conda虚拟环境创建与Python模块安装icon-default.png?t=N7T8https://blog.csdn.net/d8958/article/details/131499072

总结:conda的虚拟环境和Python的虚拟环境的区别

Conda 和 Python 的虚拟环境(如使用 venvvirtualenv 创建的虚拟环境)都是用于管理项目依赖关系和隔离不同项目的工具,但它们有一些重要区别:

  1. 包管理器和环境管理器:

    • Conda 是一个综合的包管理器和环境管理器。它可以用来安装不仅限于Python包的软件包,并且可以创建和管理包含不同版本Python解释器和其他软件的独立环境。Conda 还可以跨平台使用,因此可以在不同操作系统上轻松共享环境。

    • Python虚拟环境 是一个轻量级的环境管理器,用于创建独立的Python运行环境。它主要用于隔离不同项目的Python依赖关系,但不涉及其他软件包的安装。

  2. 多语言支持:

    • Conda 支持多种编程语言,因此可以用于管理不同语言的项目依赖关系。

    • Python虚拟环境 主要用于管理Python项目的依赖关系,不支持其他编程语言的依赖项。

  3. 依赖解析:

    • Conda 具有更强大的依赖解析功能,可以解决复杂的依赖关系,确保软件包之间的兼容性。

    • Python虚拟环境 主要依赖于Python的包管理工具(如 pip)来解析和安装Python包,依赖解析相对较简单。

  4. 环境复制和分享:

    • Conda 环境可以轻松地复制和分享,因为它包含了环境的完整描述,包括Python解释器和其他软件包。

    • Python虚拟环境 通常只包含Python解释器和已安装的Python包,如果要分享虚拟环境,通常需要手动记录依赖项列表。

  5. 操作系统和平台:

    • Conda 是跨平台的,可以在不同操作系统上使用,因此可以在不同平台上创建和使用相同的环境。

    • Python虚拟环境 通常是与操作系统相关的,因此在不同操作系统之间可能需要重新创建环境。

综上所述,Conda 是一个功能更丰富的工具,适用于多语言项目和复杂的依赖关系管理,而Python虚拟环境更适用于仅管理Python项目的依赖关系。选择哪个工具取决于项目的需求和复杂性。

        这篇博文也有类似的描述:

conda和Python的虚拟环境有什么区别?icon-default.png?t=N7T8https://blog.csdn.net/m0_57236802/article/details/131839362

延伸思考:二者可以结合使用吗?

        这是一个很有趣的问题,经过上面的分析,似乎conda的权限比python的权限大一点,通俗点讲是可以在conda的虚拟环境下嵌套多个python虚拟环境,比如这样:

        有意思的来了,我之前想在一个python==3.8的环境里调用另外一个要求python>=3.11d的项目,这个时候是不是就可以考虑在conda创建的elgant虚拟环境下在创建一个python==3.11的虚拟文件了?好像是可行的,后续如果需要再单独发文来说。而在conda虚拟环境下创建python虚拟环境也很容易:

具体来说,可以按照以下步骤结合使用它们:

  1. 创建和激活 Conda 环境

    使用 Conda 创建一个 Conda 环境,这将包含需要的 Python 版本以及其他 Conda 包。例如:

    conda create --name mycondaenv python=3.8 

    然后激活 Conda 环境:

    conda activate mycondaenv 
  2. 在 Conda 环境中创建 Python 虚拟环境

    在激活的 Conda 环境中,使用 Python 的虚拟环境管理工具(如 venvvirtualenv)创建 Python 虚拟环境。例如:

    python -m venv mypythonenv 

    然后激活 Python 虚拟环境:

    source mypythonenv/bin/activate # 在 Linux/Mac 上 
    或 
    mypythonenv\Scripts\activate # 在 Windows 上 
  3. 在 Python 虚拟环境中安装所需的 Python 包

    在激活的 Python 虚拟环境中,使用 pip 安装 Python 包,这些包将与该虚拟环境一起使用。

  4. 使用 Conda 包管理其他软件包

    如果需要安装与 Python 无关的软件包,例如系统库或数据科学工具,可以在 Conda 环境中使用 Conda 包管理器。

这样,可以在 Conda 环境中创建一个隔离的 Python 虚拟环境,并且还可以使用 Conda 管理其他依赖项。但请注意,管理两个虚拟环境需要小心,以确保不会发生冲突。

完结撒花

        至此,把关于这个问题的思考以及能找到的答案都描述清楚了,希望对大家有所帮助。

        

相关文章:

conda和Python的虚拟环境如何结合使用,以及二者之间到底有什么区别?

问题描述 今天在复现streamlit的代码时(参考Streamlit 讲解专栏(一):安装以及初步应用),根据这篇博文指导,要先用以下指令创建一个虚拟环境: # 创建虚拟环境(使用venv&a…...

宇凡微YE09合封芯片,集成高性能32位mcu和2.4G芯片

合封芯片是指将主控芯片和外部器件合并封装的芯片,能大幅降低开发成本、采购成本、减少pcb面积等等。宇凡微YE09合封芯片,将技术领域推向新的高度。这款高度创新性的芯片融合了32位MCU和2.4G芯片,为各种应用场景提供卓越的功能和性能。 32位M…...

使用perf_analyzer和model-analyzer测试tritonserver的模型性能超详细完整版

导读 当我们在使用tritonserver部署模型之后,通常需要测试一下模型的服务QPS的能力,也就是1s我们的模型能处理多少的请求,也被称为吞吐量。 测试tritonserver模型服务的QPS通常有两种方法,一种是使用perf_analyzer 来测试&#…...

docker 部署springboot(成功、截图)

1.新建sringboot工程并打包 2.编写Dockerfile文件 # 基础镜像使用java FROM openjdk:8 # 作者 MAINTAINER feng # VOLUME 指定了临时文件目录为/tmp。 # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp VOLUME /tmp # 将jar包添加…...

VMware ubuntu空间越用越大

前言 用Ubuntu 1604编译了RK3399的SDK,之后删了一些多余的文件,df - h 已用21G,但window硬盘上还总用了185GB,采用了碎片整理,压缩无法解决 1 启动Ubuntu后, 安装 VMware Tools(T) 、 2 打开ubuntu终端,压…...

stm32 学习笔记:GPIO输出

一、GPIO简介 引脚电平 0-3.3V,部分可容忍5V,对输出而言最大只能输出3.3V, 只要可以用高低电平来控制的地方,都可以用GPIO来完成,如果控制的功率比较大的设备,只需加入驱动电路即可 GPIO 通用输入输出口,可配置为 8种 …...

css换行

强制显示一行,超出... .box{white-space: nowrap; /* 强制显示一行 */overflow: hidden;text-overflow: ellipsis; /* 超出... */ } 自动换行 一般默认制动换行 .box1{word-wrap:break-word; } 显示2行,超出... .box2 {overflow: hidden;display: -…...

面试算法-常用数据结构

文章目录 数据结构数组链表 栈队列双端队列树 1)算法和数据结构 2)判断候选人的标准 算法能力能够准确辨别一个程序员的功底是否扎实 数据结构 数组 链表 优点: 1)O(1)时间删除或者添加 灵活分配内存空间 缺点: 2&…...

【动态规划刷题 10】等差数列划分 最长湍流子数组

413. 等差数列划分 链接: 413. 等差数列划分 如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。 例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。 给你一个整数数组 nums ,返回…...

redis 配置与优化

目录 一、关系数据库和非关系型数据库 二、关系型数据库和非关系型数据库区别 三、非关系型数据库产生背景 四、redis 1、概念 2、redis的优点 3、redis为什么这么快 五、redis安装与配置 一、关系数据库和非关系型数据库 关系型数据库:关系型数据库是一个结…...

数据结构例题代码及其讲解-递归与树

树 ​ 树的很多题目中都包含递归的思想 递归 递归包括递归边界以及递归式 即:往下递,往上归 递归写法的特点:写起来代码较短,但是时间复杂度较高 01 利用递归求解 n 的阶乘。 int Func(int n) {if (n 0) {return 1;}else …...

Jenkins | 流水线构建使用expect免密交互时卡住,直接退出

注意: expect 脚本必须以 interact 或 expect eof 结束。 原因: interact:使用interact会保持在终端而不会退回到原终端,所以就卡在这里。 expect eof:expect脚本默认的是等待10s,当执行完命令后,自动切回…...

git修改默认分支

git checkout 分支 切换到当前分支 git branch --set-upstream-toorigin/complete(远程分支名) 设置当前分支的上游分支为远程分支complete git branch --unset-upstream master 取消master上游分支的身份 现在,使用git commit,git push 命令可以直接…...

Android Studio开发入门教程:如何更改APP的图标?

更改APP的图标(安卓系统) 环境:Windows10、Android Studio版本如下图、雷电模拟器。 推荐图标库 默认APP图标 将新图标拉进src/main/res/mipmap-hdpi文件夹(一般app的icon图标是存放在mipmap打头的文件夹下的) 更改sr…...

MATLAB/Python的编程教程: 匹配滤波器的实现

MATLAB/Python的编程教程: 匹配滤波器的实现 注1:本文系“MATLAB/Python的编程教程”系列之一,致力于使用Python和Matlab实现特定的功能。本次要实现的功能是:匹配滤波器的实现。 匹配滤波器,这是一个在信号处理领域常见的主题,主要用于增强特定信号的检测性能,特别是在噪…...

java八股文面试[数据库]——JOIN优化

JOIN 是 MySQL 用来进行联表操作的,用来匹配两个表的数据,筛选并合并出符合我们要求的结果集。 JOIN 操作有多种方式,取决于最终数据的合并效果。常用连接方式的有以下几种: 什么是驱动表 ? 多表关联查询时,第一个被处理的表就是驱动表,使用…...

Java语法中一些需要注意的点(仅用于个人学习)

1.当字符串和其他类型相加时,基本都是字符串,这与运算顺序有关。 2.Java中用ctrl d 来结束循环输入。 3.nextLine() 遇到空格不会结束。 4.方法重载 4.1. 方法名必须相同 4.2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不…...

golang 线程 定时器 --chatGPT

问:线程函数write(ch,timer),功能为启动一个线程,循环执行打印,打印条件为触发ch chane 或 timer定时器每隔一段时间会触发 GPT:以下是一个示例Golang代码,其中有一个名为 write 的线程函数,它会在触发ch通道或每隔一…...

java 编程 7个简单的调优技巧

你的Java性能调优有救了!分享7个简单实用的Java性能调优技巧 一、以编程方式连接字符串 在Java中有很多不同的连接字符串的选项。比如,可以使用简单的或、良好的旧StringBuffer或StringBuilder。 那么,应该选择哪种方法? 答案取…...

03-Dockerfile

Dockerfile简介 Dockerfile是什么? Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本 Dockerfile官网 https://docs.docker.com/engine/reference/builder/ Dockerfile构建三步曲 编写Dockerfile文件docke…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...