问题描述
今天在复现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虚拟环境的主要目的包括:
隔离依赖项:每个虚拟环境都有自己的Python解释器和包安装目录,因此您可以为每个项目选择特定的Python版本和依赖项版本,而不会影响其他项目。
避免依赖冲突:在不同的项目中使用不同版本的Python库和包时,可以避免依赖冲突,因为它们被隔离在各自的虚拟环境中。
提高可维护性:虚拟环境使项目的依赖项清晰可见,有助于更轻松地管理项目的依赖项并确保可维护性。
兼容性:不同的项目可能需要不同版本的Python或依赖项,虚拟环境允许您灵活地管理这些要求。
Python虚拟环境通常是通过以下工具创建和管理的:
venv
(在Python 3.3及更高版本中可用):Python标准库中的venv
模块可以用来创建和管理虚拟环境。
virtualenv
:这是一个第三方工具,用于创建和管理Python虚拟环境。它兼容Python 2.x 和 3.x 版本。
conda
:这是一个流行的开源工具,用于数据科学和机器学习项目的环境管理。它可以创建Python虚拟环境,并且还可以管理非Python软件包。通过创建虚拟环境,开发人员可以更轻松地管理复杂的Python项目,确保项目之间的隔离性,同时简化依赖项管理和项目部署。
看的出来,python虚拟环境的创建也是可以用conda来实现的,换句话说,conda创建虚拟环境的时候同时也会创建一个一个python的虚拟环境(注:在这里面是指和系统python环境不冲突的环境),循着这个思路,我们再来想一下什么是conda虚拟环境?
更详细的可以参考这篇博文:
一文掌握Python虚拟环境-提升你的开发效率https://zhuanlan.zhihu.com/p/594114976?utm_id=0
继续思考:conda虚拟环境
conda虚拟环境是什么?简单来说,Conda虚拟环境是一种通过Conda工具创建和管理的Python虚拟环境。Conda是一个开源的包管理和环境管理工具,通常与Anaconda或Miniconda发行版一起使用,用于管理Python和非Python软件包,以及它们的依赖关系。Conda虚拟环境允许用户在同一计算机上创建多个独立的Python环境,每个环境都有自己的Python解释器和包集合,以便进行不同项目的开发和部署。
Conda虚拟环境的主要目的包括:
依赖隔离:每个Conda虚拟环境都具有独立的Python解释器和包管理系统,使得不同项目可以使用不同版本的Python和依赖项,而不会互相干扰。
依赖管理:Conda允许用户轻松创建、安装、更新和删除依赖项,包括Python库以及非Python软件包,这有助于确保项目所需的依赖项可用和一致。
跨平台兼容性:Conda虚拟环境可以在不同操作系统上使用,确保项目在不同平台上的一致性。
环境复制:通过创建Conda环境的克隆或副本,用户可以快速复制整个环境,以便在不同地方重现相同的工作环境。
Conda虚拟环境通常通过以下方式创建和管理:
conda create
命令:使用conda create
命令可以创建新的Conda虚拟环境,用户可以指定Python版本和安装的包。
conda activate
和conda deactivate
命令:用于激活和停用Conda虚拟环境,以切换不同的环境。
conda env export
和conda 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模块安装https://blog.csdn.net/d8958/article/details/131499072
总结:conda的虚拟环境和Python的虚拟环境的区别
Conda 和 Python 的虚拟环境(如使用
venv
或virtualenv
创建的虚拟环境)都是用于管理项目依赖关系和隔离不同项目的工具,但它们有一些重要区别:
包管理器和环境管理器:
Conda 是一个综合的包管理器和环境管理器。它可以用来安装不仅限于Python包的软件包,并且可以创建和管理包含不同版本Python解释器和其他软件的独立环境。Conda 还可以跨平台使用,因此可以在不同操作系统上轻松共享环境。
Python虚拟环境 是一个轻量级的环境管理器,用于创建独立的Python运行环境。它主要用于隔离不同项目的Python依赖关系,但不涉及其他软件包的安装。
多语言支持:
Conda 支持多种编程语言,因此可以用于管理不同语言的项目依赖关系。
Python虚拟环境 主要用于管理Python项目的依赖关系,不支持其他编程语言的依赖项。
依赖解析:
Conda 具有更强大的依赖解析功能,可以解决复杂的依赖关系,确保软件包之间的兼容性。
Python虚拟环境 主要依赖于Python的包管理工具(如
pip
)来解析和安装Python包,依赖解析相对较简单。环境复制和分享:
Conda 环境可以轻松地复制和分享,因为它包含了环境的完整描述,包括Python解释器和其他软件包。
Python虚拟环境 通常只包含Python解释器和已安装的Python包,如果要分享虚拟环境,通常需要手动记录依赖项列表。
操作系统和平台:
Conda 是跨平台的,可以在不同操作系统上使用,因此可以在不同平台上创建和使用相同的环境。
Python虚拟环境 通常是与操作系统相关的,因此在不同操作系统之间可能需要重新创建环境。
综上所述,Conda 是一个功能更丰富的工具,适用于多语言项目和复杂的依赖关系管理,而Python虚拟环境更适用于仅管理Python项目的依赖关系。选择哪个工具取决于项目的需求和复杂性。
这篇博文也有类似的描述:
conda和Python的虚拟环境有什么区别?https://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虚拟环境也很容易:
具体来说,可以按照以下步骤结合使用它们:
创建和激活 Conda 环境:
使用 Conda 创建一个 Conda 环境,这将包含需要的 Python 版本以及其他 Conda 包。例如:
conda create --name mycondaenv python=3.8
然后激活 Conda 环境:
conda activate mycondaenv
在 Conda 环境中创建 Python 虚拟环境:
在激活的 Conda 环境中,使用 Python 的虚拟环境管理工具(如
venv
或virtualenv
)创建 Python 虚拟环境。例如:python -m venv mypythonenv
然后激活 Python 虚拟环境:
source mypythonenv/bin/activate # 在 Linux/Mac 上 或 mypythonenv\Scripts\activate # 在 Windows 上
在 Python 虚拟环境中安装所需的 Python 包:
在激活的 Python 虚拟环境中,使用
pip
安装 Python 包,这些包将与该虚拟环境一起使用。使用 Conda 包管理其他软件包:
如果需要安装与 Python 无关的软件包,例如系统库或数据科学工具,可以在 Conda 环境中使用 Conda 包管理器。
这样,可以在 Conda 环境中创建一个隔离的 Python 虚拟环境,并且还可以使用 Conda 管理其他依赖项。但请注意,管理两个虚拟环境需要小心,以确保不会发生冲突。
完结撒花
至此,把关于这个问题的思考以及能找到的答案都描述清楚了,希望对大家有所帮助。