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

完结撒花

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

        

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3.11教程2:基础数据类型(数字和字符串)、组合数据类型(集合、元组、列表、字典)

文章目录 五、基本数据类型5.1 整数和浮点数5.1.1 整数和浮点数的类型5.1.2 进制和进制转换5.1.3 round函数 5.2 运算符5.2.1 常用运算符、运算符函数和逻辑运算符5.2.2 位运算符5.2.3 运算符的优先级及其进阶使用5.2.4 海象运算符: 5.3 布尔类型5.4 字符串5.4.1 字符串的基本操…

【SpringSecurity】八、集成图片验证码

文章目录 1、生成图片验证码2、创建验证码过滤器3、将过滤器加入SpringSecurity过滤链4、修改登录页 SpringSecurity是通过过滤器链来完成的,接下来的验证码,可以尝试创建一个过滤器放到Security的过滤器链中,在自定义的过滤器中比较验证码。…

docker快速安装-docker一键安装脚本

1.下载/配置安装脚本 touch install-docker.sh #!/bin/bash #mail:ratelcloudqq.com #system:centos7 #integration: docker-latestclear echo "######################################################" echo "# Auto Install Docker …

OJ练习第164题——具有所有最深节点的最小子树

具有所有最深节点的最小子树 力扣链接:865. 具有所有最深节点的最小子树 力扣链接:1123. 最深叶节点的最近公共祖先 题目描述 给定一个根为 root 的二叉树,每个节点的深度是 该节点到根的最短距离 。 返回包含原始树中所有 最深节点 的…

PEX装机

目录 一、PXE是什么? 二、PXE的组件: vsftpd/httpd/nfs tftp dhcp 三、配置vsftpd 四、配置tftp 1.安装tftp-server 2.启动tftp 五、准备pxelinx.0文件、引导文件、内核文件 1.准备pxelinux.0文件 2.准备引导文件、内核文件 六、配置dhcp …

爬楼梯【动态规划】

爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; class Solution {public int climbStairs(int n) {if (n < 2) return n;//特殊情况处理int dp[] new int[n 1];dp[1] 1;//因为数组索…

java面试之ThreadLocal问题

什么是ThreadLocal,它的基本用法是什么 简单来说就是能在多线程中保持变量独立的线程对象 不用Threadlocal多线程访问同一个变量会出现的问题 package com.pxx;/*** Created by Administrator on 2023/9/3.*/ public class Demo1 {private String v1;public String getV1() …

非科班菜鸡算法学习记录 | 代码随想录算法训练营第57天|| 647. 回文子串 516.最长回文子序列 动态规划总结篇

647. 回文子串 知识点&#xff1a;动规 状态&#xff1a;看思路自己写 思路&#xff1a; dp不好想&#xff0c;dp[i][j] 是指左闭右闭时&#xff0c;是否为回文,bool类型&#xff1b; 注意递归公式和遍历顺序 class Solution { public:int countSubstrings(string s) {int …

音频——I2S TDM 模式(六)

I2S 基本概念飞利浦(I2S)标准模式左(MSB)对齐标准模式右(LSB)对齐标准模式DSP 模式TDM 模式 文章目录 TDM formatTDM format ATDM format BTDM format C总结 TDM format TDM 一般有三种常用操作模式&#xff1a;TDM A mode &#xff0c;TDM B mode 和 TDM C mode&#xff0c; …

【算法系列篇】模拟算法

文章目录 前言1.替换所有问号1.1 题目要求1.2 做题思路1.3 Java代码实现 2. 提莫攻击2.1 题目要求2.2 做题思路2.3 Java代码实现 3. N 字形变换3.1 题目要求3.2 做题思路3.3 Java代码实现 4. 外观数列4.1 题目要求4.2 做题思路4.3 Java代码实现 5. 数青蛙5.1 题目要求5.2 做题思…

安防监控/视频存储/视频汇聚平台EasyCVR如何接入智能分析网关V4?

TSINGSEE青犀AI边缘计算网关硬件 —— 智能分析网关目前有5个版本&#xff1a;V1、V2、V3、V4、V5&#xff0c;每个版本都能实现对监控视频的智能识别和分析&#xff0c;支持抓拍、记录、告警等&#xff0c;每个版本在算法模型及性能配置上略有不同。硬件可实现的AI检测包括&am…

VMware虚拟机安装CentOS7设置静态ip

vim /etc/sysconfig/network-scripts/ifcfg-ens33修改BOOTPROTO的值为static 增加最后那四项&#xff0c;参数在编辑&#xff0c;虚拟网络编辑器里面看

如何远程访问Linux MeterSphere一站式开源持续测试平台

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…

【算法专题突破】双指针 - 和为s的两个数字(6)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后&#xff1a; 1. 题目解析 题目链接&#xff1a;剑指 Offer 57. 和为s的两个数字 - 力扣&#xff08;Leetcode&#xff09; 这道题题目就一句话但是也是有信息可以提取的&#xff0c; 最重要的就是开始的那句话&#…

【LeetCode】19. 删除链表的倒数第 N 个结点

19. 删除链表的倒数第 N 个结点&#xff08;中等&#xff09; 方法&#xff1a;快慢指针 思路 为了找到倒数第 n 个节点&#xff0c;我们应该先找到最后一个节点&#xff0c;然后从它开始往前数 n-1 个节点就是要删除的节点。 对于一般情况&#xff1a;设置 fast 和 slow 两个…

Golang编写客户端SDK,并开源发布包到GitHub,供其他项目import使用

目录 编写客户端SDK&#xff0c;并开源发布包到GitHub1. 创建 GitHub 仓库2. 构建项目&#xff0c;编写代码Go 代码示例&#xff1a;项目目录结构展示&#xff1a; 3. 提交代码到 GitHub仓库4. 发布版本5. 现在其他人可以引用使用你的模块包了 编写客户端SDK&#xff0c;并开源…

个人博客项目测试报告

目录 一. 项目背景 二. 概述 三. 功能测试用例 四. 自动化测试用例 一. 项目背景 项目链接: http://81.70.189.104:8080/login.html 个人博客系统提供了 登录、注册、写博客&发布博客、删除博客、修改博客功能。前端的页面有 登录页、注册页、个人博客列表页、博客详情…

CloudCompare 二次开发(9)——半径滤波

目录 一、概述二、代码集成三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 使用CloudCompare与PCL的混合编程实现点云半径滤波。半径滤波的算法原理见:PCL 半径滤波器。基于PCL将半径滤波集成到Cl…

c#事件(event)

概述&#xff1a; C#中的事件是一种特殊的委托&#xff0c;它用于实现观察者模式&#xff0c;允许对象在特定事件发生时通知其他对象。 以下是使用C#事件的示例&#xff1a; 首先&#xff0c;定义一个包含事件的类&#xff1a; public class EventPublisher {// 声明一个事…

通俗易懂讲解大模型:Tokenizer

Tokenizer Tokenizer 是 NLP pipeline 的核心组件之一。Tokenizer 的目标是&#xff1a;将文本转换为模型可以处理的数据。模型只能处理数字&#xff0c;因此 Tokenizer 需要将文本输入转换为数字输入。 通常而言有三种类型的 Tokenizer &#xff1a;Word-based Tokenizer、Cha…