告别Anaconda?试试这些替代品吧
2025/1/1 3:03:19
本文主要是介绍告别Anaconda?试试这些替代品吧,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
AI 创作的图像 (GPT-4 / DALL-E)
寻找 Conda 的替代品像许多在研究机构工作的 Python 用户一样,我最近得知 Anaconda 更新了许可政策,因为他们联系了我工作的非盈利研究机构。他们更新了许可政策,要求员工超过 200 人的非盈利机构不仅需要为每个安装完整 Anaconda 分发版的用户购买付费许可证,还要求那些从默认包仓库拉取包的用户也购买许可证。我一直使用 miniconda(本身是免费且开源的),但默认情况下它会从需要许可证的“defaults”通道拉取包。
我可以直接更新我的miniconda配置,使用社区支持且依然免费的‘conda-forge’仓库,或者切换到miniforge继续像以前一样工作,但我借此机会四处看看其他选项。Python 是一种免费且开源的语言;实际上,Python 社区创建了 Anaconda “默认” 仓库中的那些包,所以我为什么要为这些我没有付费的公司提供的免费软件付费呢?
注意: 如果您的组织决定阻止访问 repo.anaconda.com ,以防止员工使用“defaults”通道,那么需要注意的是,miniconda中的“base”环境里仍然会从“defaults”通道拉取包,因此你就不能再安装或更新miniconda了。
逛了一圈之后,我决定仔细看看这两个UV和Pixi。UV和Pixi与Conda有一个重要的不同之处。Conda会在一个中央注册表中创建环境,这些环境可以在任何地方激活和使用,而UV和Pixi则是以项目为中心,在你的项目文件夹中创建虚拟环境。
(紫外线)
我首先看的是这个替代方案 UV,它自称是如下:
“一个极快的Python包安装工具,用Rust编写,并设计为pip
和 pip-tools
工作流程的替代工具。”
Astral,开发了UV的公司同时也是Rye和Ruff的开发者。据我所知,Rye的功能似乎正在被集成到UV中,UV最终将使Rye变得多余。只需一条命令即可在所有常见平台上安装UV。
安装UV
在 Linux、MacOS 或 WSL(Windows Subsystem for Linux)上安装 UV 的命令如下:
运行以下命令来安装astral.sh的uv工具: curl -LsSf https://astral.sh/uv/install.sh | sh。
在 Windows 上安装 UV 的命令:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
运行此PowerShell命令以从astral.sh下载并安装脚本。
或者可以从Github直接下载安装包或二进制文件。
在 MacBook Pro 上装 UV 只用了几秒钟。
安装 UV 在 macOS 上
重启 shell 后,uv
命令就可以用了。
用UV来安装Python
与conda或miniconda不同,UV在安装过程中不会安装基础Python环境。要安装你想要安装的Python版本,请执行如下命令,并将【版本】替换为你想要安装的Python版本:
uv python 安装 <版本号>(例如:uv python install 3.7.4)
在这里我一眨眼的工夫就安装了Python 3.12。这快得令人难以置信,以至于基于我对conda的使用经验,我简直不敢相信。
安装 Python 3.12 和 UV
新建一个项目
要创建一个新项目,请使用 uv init
命令,这将在初始化新项目之前创建一个新的项目文件夹。你可以指定要使用的指定的Python版本。
uv init -p 3.12 爸爸笑话
安装依赖项:
要为你的项目安装 Python 包依赖,切换到新项目目录并使用 uv add
命令。
cd 爸爸笑话文件夹 uv 提交请求
下面是一个创建新的UV项目实例、设置虚拟环境(virtual environment)并安装依赖项(dependencies)的示例:
创建一个新的Python项目并引入依赖
上述示例的结果是如下的目录结构。它不仅创建了这些文件,还把项目初始化为一个 git 仓库。它创建了一个空的 README.md ,一个特定于 Python 的 .gitignore ,一个使用了指定 Python 版本的 Python 虚拟环境,依赖版本锁定文件(如 poetry 的 lock 文件),以及标准的 pyproject.toml 文件(例如 poetry 的配置文件)。
爸爸笑话 ├── .git ├── .gitignore ├── .python-version ├── .venv ├── README.md ├── dad-jokes.py ├── pyproject.toml └── uv.lock
你可能已经注意到常见的“requirements.txt”文件缺失。如果你打算与他人分享项目,可以通过以下命令轻松生成一个 requirements.txt 文件:
uv pip compile pyproject.toml -o requirements.txt
创建 requirements.txt 文件的示例
为了您的项目创建一个requirements.txt文件
启动一个交互的Python环境
在项目中的虚拟环境中运行交互式Python shell,可以在项目目录中使用uv run python
命令。
运行一下 Python
使用 UV 生成一个交互式的 Python 命令行
给项目加一个脚本
让我们写一个简单的Python脚本,来测试在这个由UV创建的虚拟环境中运行代码。我已经更新了‘dad-jokes.py’文件如下:
import requests def get_dad_joke(): url = "https://icanhazdadjoke.com/" headers = { "Accept": "application/json" } response = requests.get(url, headers=headers) if response.status_code == 200: joke = response.json().get('joke') return joke else: return "没能获取到笑话。" # 没能获取到笑话。 if __name__ == "__main__": # 打印获取到的笑话 print(get_dad_joke())
用 UV 运行脚本
要运行此脚本,您应该使用 uv run
命令,而不是直接运行 python <script-name>。
运行 dad-jokes.py 脚本
一个新爸爸的笑话
用UV运行我们的脚本,搞到一个老爸笑话。
保存您的更改
由于 UV 在创建项目文件夹时将其初始化为 git 仓库,你现在可以提交更改并推送到 GitHub。
git add . git commit -m "第一次提交代码" # 这是第一次提交代码
总的来说,UV似乎是个很好的工具。它真的很快,不依赖于任何Anaconda包。UV所有的包都来自PyPI。
然后,我试用了Pixi,它特别适合Conda用户。
“Pixi 是一款多功能的开发工作流程工具,旨在简化项目依赖项、任务和环境的管理过程。Pixi 基于 Conda 生态系统构建,能够与 PyPI 生态系统无缝集成。”
值得一提的是,当使用 PyPI 的包时,Pixi 实际上使用 UV 作为包解析工具:https://prefix.dev/blog/uv_in_pixi。
值得注意的是,Pixi默认使用conda包并从免费的“conda-forge”通道获取这些包。如果你完全不想用Conda生态系统,Pixi可能不适合你的情况。
安装Pixi.js
在 Linux、MacOS 和 WSL (Windows Subsystem for Linux) 上安装 Pixi 的方法:请参考以下步骤。
curl -fsSL https://pixi.sh/install.sh | bash
运行此命令以安装Pixi.sh
在 Windows 上安装 Pixi:
powershell -ExecutionPolicy ByPass -c "iwr -useb https://pixi.sh/install.ps1 | iex" # 运行此PowerShell命令来安装pixi.sh # 注:iwr代表Invoke-WebRequest,iex代表Invoke-Expression
可以从GitHub直接下载安装包或二进制。
在我的 MacBook Pro 上安装 Pixi 比 UV 稍微慢一点,不过比 conda 快很多。
创建一个新项目
要创建一个新项目,你可以使用pixi init
命令来创建。这将创建一个新的项目文件夹。你可以指定初始化新项目时使用的特定Python版本,新项目的名称可以是‘dad-jokes’。
pixi init 爸爸冷笑话
安装依赖项:
要为你的项目安装Python包依赖,可以切换到新项目的目录下,并运行pixi add
命令。与UV不同,使用Pixi的话,还需要将所需的Python版本添加为依赖项。
切换到dad-jokes目录 cd dad-jokes 添加Python版本为3.12 pixi add python=3.12 安装requests库 pixi add requests
如下所示,创建一个新的Pixi项目实例,Python虚拟环境(venv),并为该脚本安装‘requests’模块:
创建一个新的Python项目并添加依赖。
如下所示的是该示例的目录结构。它比UV简洁得多,没有git仓库,也没有_README.md_或_pyproject.toml_文件。默认提供一个_pixi.toml_文件,而不是pyproject.toml。
dad 的笑话 ├── .gitattributes ├── .gitignore ├── .pixi ├── pixi.lock └── pixi.toml
你可以告诉它使用 pyproject.toml 风格的项目。这也会创建不同的文件夹布局,并设置为创建一个名为 dad-jokes 的包,其中包括一个空的 ‘init.py’ 文件在 'src'_ 文件夹下。
pixi init dad-jokes --format pyproject # 初始化一个使用笑话主题的pixi项目,并指定使用pyproject格式
使用PyPI而不是conda-forge
正如我之前提到的,Pixi 会默认从 conda-forge 获取所有依赖项
检查 Pixi 是从哪里获取 conda 包文件的。
如果你想从PyPI安装一些包,可以在添加依赖项时使用_pypi_标志:
pixi add --pypi black
这是一条用于将black库添加到Pixi项目中的命令。
从 PyPI 而不是从 conda-forge 安装软件包
如何生成requirements.txt文件?
我不明白如何创建一个标准的 requirements.txt 文件。甚至新建了一个项目并使用了 Pixi 生成的 pyproject.toml 文件,然后尝试使用 uv 的 ‘pip compile’ 命令(就像之前在 UV 部分提到的那样)并将该命令应用于 Pixi 生成的 pyproject.toml 文件,但并不奏效。或许我忽略了一些显而易见的事情?
启动一个Python的交互式环境
如果你想在你的 Pixi 项目中使用虚拟环境来运行一个交互式的 Python shell,可以这样做:在项目目录中运行 pixi shell
命令,然后输入 python
。
pixi shell(皮克西壳) python(Python)
一个启动 Pixi shell 和交互式的 Python 命令行的示例:
在Pixi项目中启动Python shell
在 Pixi 上运行脚本啊
添加了之前用过的相同的‘dad-jokes.py’脚本后(爸爸式的笑话脚本),你可以通过使用pixi run python
命令运行它。
pixi run python 爸爸笑话脚本.py
用UV运行我们写的脚本,获取一个新的爸爸梗。
与UV不同,你需要使用git将你的项目初始化为git仓库,在提交和推送你的代码之前,如果这是你的计划。
总体来看,Pixi似乎也是一个不错的工具,用户体验和工作流程与UV几乎一样,而且支持conda包,如果你特别关心这一点的话。
总结
我认为UV和Pixi之间并没有明显的胜者,它们都是康达的快速、现代替代品,都同样值得信赖。两者都采用基于项目的重点方法,而不是康达使用的全局性的环境,这在项目之间提供了更好的依赖独立性,并且两者都更快。它们还避免了康达所必需的无用的“基础”环境。我认为这两种工具都非常适合有经验的用户,但对于刚开始学习Python的初学者来说,基于项目的这种方法可能会让他们感到有些困惑。
Pixi使用Conda包可能让安装某些包(如pytorch和cuda)更容易(这只是目前的推测),但我喜欢为那些使用不同于我工具链的人提供_requirements.txt_文件。可能有一种方法可以创建requirements.txt文件,但在短暂的寻找解决方案过程中,我没能弄明白。
UV完全不使用Conda包,因此更符合远离Anaconda的精神。它默认使用标准的_pyproject.toml_文件,我可以轻松生成_requirements.txt_文件。
所以,最后我决定真的试试UV。我说“试试”是因为我还没用它做过真正的项目,所以以后可能会遇到问题。Pixi也是一个不错的工具,将来我可能还会再用它。
这篇关于告别Anaconda?试试这些替代品吧的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用
- 2025-01-03混合搜索:用LanceDB实现语义和关键词结合的搜索技术(应用于实际项目)
- 2025-01-03停止思考数据管道,开始构建数据平台:介绍Analytics Engineering Framework
- 2025-01-03如果 Azure-Samples/aks-store-demo 使用了 Score 会怎样?
- 2025-01-03Apache Flink概述:实时数据处理的利器
- 2025-01-01使用 SVN合并操作时,怎么解决冲突的情况?-icode9专业技术文章分享
- 2024-12-31自学记录鸿蒙API 13:实现人脸比对Core Vision Face Comparator
- 2024-12-31自学记录鸿蒙 API 13:骨骼点检测应用Core Vision Skeleton Detection
- 2024-12-31自学记录鸿蒙 API 13:实现人脸检测 Core Vision Face Detector