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

news2024/11/27 8:37:44

问题描述

        今天在复现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 管理其他依赖项。但请注意,管理两个虚拟环境需要小心,以确保不会发生冲突。

完结撒花

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

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/979745.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

游戏软件报错d3dx9_43.dll丢失怎么解决?这5个解决方法可以修复

我想和大家分享一个关于电脑问题的话题——d3dx9_43.dll丢失怎么解决。这个话题对于很多使用电脑的朋友来说,可能是一个非常棘手的问题。d3dx9_43.dll是 DirectX中非常重要的一部分,许多游戏和应用程序都需要它来正常运行。如果丢失了这个文件&#xff0…

RDMA 相关bug记录

对于 Client 来讲,setupConnection 中的 cm_id 应该是本地的,意味着后续 create pd \ cq \ qp 等等传入的 cm_id 都是本地 id。但是对于 Server 来讲,收到 client 的链接请求时将 client 的 cm_id 传入 setupConnection,意味着后续…

RunnerGo怎么做性能测试

RunnerGo是一个功能强大,使用简单的性能测试平台,它基于go语言开发,支持接口管理、自动化测试、性能测试等功能。 RunnerGo有什么特点 支持并发模式、错误率模式、阶梯模式、每秒请求数模式、响应时间模式等多种压测模式,支持自…

软考高级之系统架构师之项目管理

今天是2023年09月06日,距离软考高级只有58天,加油! 概念 临时性:是指每一个项目都有一个明确的开始时间和结束时间,临时性也指项目是一次性的。 风险 风险具有以下特性:客观性、偶然性、相对性、社会性…

【探索Linux】—— 强大的命令行工具 P.8(进程优先级、环境变量)

阅读导航 前言一、进程优先级1. 优先级概念2. Linux查看系统进程3. PRI(Priority)和NI(Nice) 二、环境变量1. 概念2. 查看环境变量方法3. 环境变量的组织方式4.通过代码获取环境变量5. 环境变量的特点 总结温馨提示 前言 前面我们…

MySQL主从复制读写分离

读写分离 读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库 读写分离的好处 因为数据库的“写…

在Linux系统启动java程序(jar包)

文章目录 1. mvn install生成jar包2. 利用ftp工具将jar包上传到linux服务器3. 在linux服务器上启动jar包3.1 直接启动jar包3.2 后台启动jar包3.3 后台不挂断启动jar包3.4 后台不挂断启动jar包并输出日志到指定文件3.5 其他 1. mvn install生成jar包 2. 利用ftp工具将jar包上传到…

小程序中如何查看会员的积分和变更记录

​积分是会员卡的一个重要功能,可以用于激励会员消费和提升用户粘性。在小程序中,商家可以方便地查看会员卡的积分和变更记录,以便更好地了解会员的消费行为和积分变动情况。下面将介绍如何在小程序中查看会员卡的积分和变更记录。 1. 找到指…

Android Ble蓝牙App(七)扫描过滤

Ble蓝牙App(七)扫描过滤 前言目录正文一、增加菜单二、使用MMKV① 添加依赖② 封装MMKV③ 使用MMKV 三、过滤空设备名四、过滤Mac地址五、过滤RSSI六、源码 前言 在上一篇文章中了解了MTU的相关知识以及对于设备操作信息的展示,本篇文章中将增…

uniapp 在 onLoad 事件中 this.$refs 娶不到的问题

现象 本人想在主页面加载的时候调用子组件的方法。示例代码如下: 运行,发现 this.$refs 取不到。如下图所示: 解决方法,把onLoad 换为 onReady 就可以了。

存储过程报Illegal mix of collations错误的解决方法

CREATE PROCEDURE maxAgeStudent(IN _gender CHAR) BEGINDECLARE maxage INT DEFAULT 0;SELECT max(age) INTO maxage FROM student where gender _gender;SELECT * from student WHERE age maxage and gender _gender; END; 在调用的时候 call maxAgeStudent(1) 产生了报…

MySQL数据库的增删改查(进阶)

目录 数据库约束 约束类型 NULL约束 UNIQUE:唯一约束 DEFAULT:默认值约束 PRIMARY KEY:主键约束 FOREIGN KEY:外键约束 表的设计 一对一关系 一对多关系 多对多关系 查询 聚合查询 聚合函数 GROUP BY子句 HAVING …

LeetCode 1123. 最深叶节点的最近公共祖先:DFS

【LetMeFly】1123.最深叶节点的最近公共祖先 力扣题目链接:https://leetcode.cn/problems/lowest-common-ancestor-of-deepest-leaves/ 给你一个有根节点 root 的二叉树,返回它 最深的叶节点的最近公共祖先 。 回想一下: 叶节点 是二叉树…

2023年09月在线IDE流行度最新排名

点击查看最新在线IDE流行度最新排名(每月更新) 2023年09月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多,人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相…

如何创建专栏

前言 今天,有一个粉丝问我该如何创建一个专栏,好的,安排上! 什么是专栏? 专栏是用户写的一部分博客的分类。可以理解为: 1.我有一些文件(文件代指博客),于是我创建了一…

十六、MySQL常用函数有哪些?

1、函数 说到函数,就必须知道其本质是什么,在MySQL中,函数是指一段可以直接被另一段程序调用的程序或代码。 2、字符串函数 (1)函数 (2)字符串连接函数 字符串连接函数: select c…

第三章 LInux多线程开发 3.1-3.5线程创建 终止 分离

创建线程:(好好记住 可能会叫写代码) 一般情况下,main函数所在的线程我们称之为主线程(main线程),其余创建的线程称之为子线程。 程序中默认只有一个进程,fork()函数调用,2进行 程序…

ComfyUI 安装

背景: stable diffussion XL最先适配,专业性强的SD操作界面 安装步骤: git clone GitHub - comfyanonymous/ComfyUI: A powerful and modular stable diffusion GUI with a graph/nodes interface. 1、pip install torch torchvision torc…

【压力测试指南】没有任何文档,小白也可以做的压力测试

前言 一般在执行压力测试之前,会由开发提供出接口文档,包含一些接口的详细参数,便于测试工程师编写测试脚本。但在某些情况下,接口等相关文档缺失,那作为Tester,我们该如何顺利的实施压力测试呢&#xff1…

问道管理:光刻胶概念再度活跃,广信材料两连板,蓝英装备等涨停

光刻胶概念6日盘中再度活泼,截至发稿,扬帆新材、广信资料、蓝英配备“20cm”涨停,盛剑环境亦涨停,高盟新材涨超9%,同益股份、容大感光涨超5%。 值得注意的是,广信资料已连续两个交易日涨停。公司近来在成绩…