前言
因为需要使用多个版本的Python解释器,在寻找方案时找到了 conda
,真正用过之后理解了conda所说的虚拟环境,Anaconda是一个创造小房间的工具,小房间内的主力环境可以是Python也可以是R。
思考
因为对Python相对熟悉,所以谈谈Python的使用,Python的新版本会更新很多内容,虽然基本上是向下兼容的,但是各种包的依赖不是说升级就能升级的,
特别是Python3.x和Python2.x简直就是两种语言,那么如果在一台电脑负责依赖两个不同版本的Python库时,就会很头疼,环境变量和依赖关系搞得人抓耳挠腮
而 conda 相当与提供了小房子搬的隔离,类似于VMWare Workstation的作用,比如我平时使用Windows开发,但是有个项目需要在Ununtu 16.04版本运行,怎么办?
我当然可以把系统换成Ununtu 16.04,但是如果不久又有新的项目需要在Ununtu 20.04下进行,我还要换系统吗?万一两个项目同时进行呢?
这时就可以利用VMWare创建一个个隔离的操作系统,在不同的虚拟机系统下完成对应系统项目的开发和运行
Python也有这样的问题,不同的Python版本安装了不同的Python库,想要不相互影响就得完成隔离。
Python 其实自带了一个 venv 模块,可以完成Python库的隔离,但是Conda更加强大,不仅隔离 Python 库,还可以隔离 C 库、二进制文件和其他依赖项。同时支持多种编程语言的环境管理,不仅限于 Python,还可以管理 R、Ruby 等语言的环境。
Conda 环境的 Python 解释器是独立的,可以与系统安装的 Python 解释器不同,这样就可以在不同的环境中使用不同版本的 Python。
Conda 可以启动不同的Python环境,不同的环境下可以安装不同的库和各种依赖版本,在特定环境下完成开发和测试任务。
实践
前面说的这些都是理论和个人理解,说说我为什么会找到 Conda 并使用它
我本地使用的是Python 3.7.6
,最近在处理Supabase相关的事情,核心下载其项目中的Objects文件,暂时可以把它当成是一个OSS平台,客户端API中有我比较常用的Python语言,所以自然而然的使用Python来写下载数据的接口
但是通过 pip 安装的 supabase
库只有 0.7.1
,执行示例代码时总是遇到一些符号问题,查官方的代码库已经 2.6.0
了,差距有点大,一开始我想着把 pip
升级了,应该能获得一些库的新版本吧,但升级后无果。
然后就想到把Python升级了,但是我之前的很多工具都是在 Python 3.7.6
的环境下编写的,各种库以及依赖也是在这个环境下安装的,如果要把Python升级到最新的Python 3.12.4
可能导致我之前的脚本都出现问题。
所以在这种情况下我搜索能不能给我一个临时的 Python 3.12
的环境,我临时测一些问题,搞定后删掉就行,主力开发环境还是保留 Python 3.7.6
,结果我就搜到了 Conda,以及 Conda 两种常用的发行版Anaconda 和 Miniconda,使用后发现它完全能满足我的要求。
利用 Anaconda
可以创建各个版本的 Python 解释器,每个解释器有相互隔离的环境,可以安装自己的库,针对每个环境启动不同的命令行工具
1 | (conda-py-3-12-4) E:\opensource\supabase>pip list |
在这里我轻松的就安装上了 supabase:2.6.0
Python 自带的虚拟环境(通过 venv 模块创建)对于大多数开发需求来说是非常好用的,venv 是 Python 内置的模块,不需要额外安装或配置,非常方便。适用于所有支持 Python 的操作系统,且与主流的包管理工具如 pip 完美兼容。
使用 venv 创建虚拟环境时,它会基于你当前系统中的 Python 解释器版本创建环境,因此 venv 本身不提供安装或管理不同 Python 版本的功能。
总结
- Conda 支持多种编程语言的环境管理,不仅限于 Python,还可以管理 R、Ruby 等语言的环境
- Conda 环境的 Python 解释器是独立的,可以多个版本的 Python 解释器
- Python 其实自带了一个 venv 模块,对于大多数开发需求来说是非常好用的
知其不可奈何而安之若命,是智慧还是无奈?她开心的对我说“北京真好”,是的,北京挺不错的,对于金钱数字的生物来说,这里是享受的天堂,应有尽有,偶尔还会给人一点小惊喜,难的是迈过金钱数字的这个坎,99.999%的物种还停留在坎的这一边
2024-8-5 21:37:46