Rattler: 用于快速处理 conda 包的 Rust crates
Rattler 是一个提供 conda 生态系统内常用功能的库(什么是 conda 和 conda-forge?)。 该库的目标是使程序和其他库能够轻松与 conda 生态系统交互,而无需依赖 Python。 其主要用例是作为一个库,您可以在自己的工具中使用它来提供与 conda 相关的工作流。
Rattler 使用 Rust 编写,并力求为其功能提供简洁的 API(参见:组件)。 本着这一主要目标,我们旨在提供不同语言的绑定,以便轻松将 Rattler 集成到非 Rust 项目中。
Rattler 正被 pixi、rattler-build 以及 https://prefix.dev 后端积极使用。
展示
此仓库还包含一个二进制文件,展示了该库的一些功能。
这是一个安装包含 cowpy 及其所有依赖项的环境的示例,从零开始(包括 Python!):
开发:入门指南
要开始使用 Rattler 进行开发,让我们安装一个包含 cowpy 及其依赖项的环境。
克隆 Rattler 仓库,在终端中导航到仓库的根目录,并按顺序执行以下命令:
git submodule update --init
cargo run --bin rattler --release create cowpy
cargo run --bin rattler --release run -p .prefix/ cowpy --random
Python 和 Javascript 绑定
您可以通过我们强大的绑定,从 Python 或 Javascript 调用 rattler,以在 conda 环境中解决、安装和运行命令。Rattler 为您提供最快且最简洁的 conda 生态系统 Python 绑定。
Python
要安装 Python 绑定,您可以使用 pip 或 conda:
pip install py-rattler
# or
conda install -c conda-forge py-rattler
您可以在此处找到 Python 绑定的详尽文档。
从 Python 使用 rattler 的示例
rattler 的 Python 绑定旨在与 `asyncio` 配合使用。您可以访问 rattler 库的原始功能,以解决环境、安装包并在已安装的环境中运行命令。import asyncio
import tempfile
from rattler import solve, install, VirtualPackage
async def main() -> None:
# Start by solving the environment.
#
# Solving is the process of going from specifications of package and their
# version requirements to a list of concrete packages.
print("started solving the environment")
solved_records = await solve(
# Channels to use for solving
channels=["conda-forge"],
# The specs to solve for
specs=["python ~=3.12.0", "pip", "requests 2.31.0"],
# Virtual packages define the specifications of the environment
virtual_packages=VirtualPackage.detect(),
)
print("solved required dependencies")
# Install the packages into a new environment (or updates it if it already
# existed).
env_path = tempfile.mkdtemp()
await install(
records=solved_records,
target_prefix=env_path,
)
print(f"created environment: {env_path}")
if __name__ == "__main__":
asyncio.run(main())
Javascript
要使用 Javascript 绑定,您可以通过 npm 安装 @conda-org/rattler 包。rattler 被编译为 WebAssembly,可在浏览器或 Node.js 中使用。
npm install @conda-org/rattler
从 Javascript 中使用 rattler 可以访问与 conda 生态系统各处使用的相同版本比较函数。它也被用作 mambajs 的一部分,该部分使用 rattler 库从 emscripten-forge 频道 在浏览器中 解决并安装包。
试一试!
在开始之前,请确保你具备以下先决条件:
按照以下步骤克隆、编译并运行 rattler 项目:
# Clone the rattler repository along with its submodules:
git clone --recursive https://github.com/conda/rattler.git
cd rattler
# Compile and execute rattler to create a JupyterLab instance:
pixi run rattler create jupyterlab
上述命令将以 release 模式执行 rattler 可执行文件。
它会将环境下载并安装到 .prefix 文件夹中,该环境包含 jupyterlab 以及运行它所需的所有依赖项(如 python)
运行以下命令以启动 jupyterlab:
# on windows
.\.prefix\Scripts\jupyter-lab.exe
# on linux or macOS
./.prefix/bin/jupyter-lab
瞧! 你的系统上已经成功安装了 jupyterlab! 当然,你可以用这种方式安装任何你想要的包。 试试看!
贡献 😍
我们非常欢迎你参与贡献! 请参阅 CONTRIBUTION.md 以获取更多信息。如有问题、请求或想随意聊聊,我们在我们的 discord 服务器上非常活跃。 你可以通过此链接加入我们的 discord 服务器。
组件
Rattler 由多个提供不同功能的 crate 组成。
- rattler_conda_types: conda 生态系统中所有数据结构的基础类型。
- rattler_package_streaming: 提供下载、解压和创建 conda 软件包归档的功能。
- rattler_repodata_gateway: 从索引中下载、读取和处理现有 conda 软件包的信息。
- rattler_shell: 用于激活现有环境并在其中运行程序的代码。
- rattler_solve: 一个与后端无关的库,用于解决软件包可满足性问题。
- rattler_virtual_packages: 一个用于检测系统能力的 crate。
- rattler_index: 从本地软件包创建本地 conda 频道。请参阅 rattler_index README 以获取频道选项文档。
- rattler: 使用上述 crate 从零开始创建完整环境的功能。
- rattler-lock: 一个用于创建和解析 conda 环境锁文件的库。
- rattler-networking: 网络通用功能,如身份验证、镜像等。
- rattler-bin: 一个使用上述所有 crate 的包管理器示例(参见:showcase)
您可以在 crates 文件夹中找到这些 crate。
此外,我们为上述 crate 提供的大多数功能提供了 Python 绑定。
Python 包 py-rattler 可在 conda-forge 和 PyPI 上获取。
Python 绑定的文档可在 here 找到。
什么是 conda 和 conda-forge?
conda 生态系统提供跨平台、二进制软件包,您可以将其用于任何编程语言。
conda 是一个开源的包管理系统和环境管理系统,可以安装和管理多个版本的软件包及其依赖项。
conda 使用 Python 编写。
Rattler 的目标是从 Rust 提供与 conda 生态系统交互所需的所有功能。
Rattler 不是 conda 的重新实现。
conda 是一个包管理工具。
Rattler 是一个_库_,用于从不同的语言和应用与 conda 生态系统交互。
例如,它驱动了 https://prefix.dev 的后端。
conda-forge 是一个社区驱动的项目,旨在将新软件和现有软件引入 conda 生态系统。
它提供_数以万计的最新_软件包,由贡献者社区维护。
有关可用软件包的概述,请参阅 https://prefix.dev。