ITADN
conda/rattler
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈
banner

Rattler: 用于快速处理 conda 包的 Rust crates

License Build Status Project Chat Pixi Badge docs main python docs main

Rattler 是一个提供 conda 生态系统内常用功能的库(什么是 conda 和 conda-forge?)。 该库的目标是使程序和其他库能够轻松与 conda 生态系统交互,而无需依赖 Python。 其主要用例是作为一个库,您可以在自己的工具中使用它来提供与 conda 相关的工作流。

Rattler 使用 Rust 编写,并力求为其功能提供简洁的 API(参见:组件)。 本着这一主要目标,我们旨在提供不同语言的绑定,以便轻松将 Rattler 集成到非 Rust 项目中。

Rattler 正被 pixirattler-build 以及 https://prefix.dev 后端积极使用。

展示

此仓库还包含一个二进制文件,展示了该库的一些功能。 这是一个安装包含 cowpy 及其所有依赖项的环境的示例,从零开始(包括 Python!):

Installing an environment

开发:入门指南

要开始使用 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 频道 在浏览器中 解决并安装包。

试一试!

在开始之前,请确保你具备以下先决条件:

  • 较新版本的 git
  • 较新版本的 pixi

按照以下步骤克隆、编译并运行 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-forgePyPI 上获取。 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。