前言
因为需要使用多个版本的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 解释器,每个解释器有相互隔离的环境,可以安装自己的库,针对每个环境启动不同的命令行工具
(conda-py-3-12-4) E:\opensource\supabase>pip list
Package Version
----------------- --------
annotated-types 0.7.0
anyio 4.4.0
certifi 2024.7.4
deprecation 2.1.0
exceptiongroup 1.2.2
gotrue 2.6.1
h11 0.14.0
h2 4.1.0
hpack 4.0.0
httpcore 1.0.5
httpx 0.25.2
hyperframe 6.0.1
idna 3.7
packaging 24.1
pip 24.0
postgrest 0.16.9
pydantic 2.5.3
pydantic_core 2.14.6
python-dateutil 2.9.0
realtime 1.0.0
setuptools 69.5.1
six 1.16.0
sniffio 1.3.1
storage3 0.7.7
StrEnum 0.4.15
supabase 2.6.0
supafunc 0.5.1
typing_extensions 4.12.2
websockets 10.4
wheel 0.43.0
在这里我轻松的就安装上了 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%的物种还停留在坎的这一边