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

banner

License Build Status Project Chat Pixi Badge

Rattler-Build:一个快速的 conda 包构建器

Rattler-Build 工具和库可以从简单的配方格式创建跨平台可重定位的二进制文件/包。该配方格式深受 conda-buildboa 的启发,而常规 rattler-build 运行的输出是一个可以使用 piximambaconda 安装的包。

Rattler-Build 是一个用 Rust 从头编写的独立二进制文件,不依赖于 conda-build 或 Python。

安装

你可以从 Github Releases 获取 rattler-build 的预发布版本。

它(当然)也可以从 conda-forge 获取:

pixi global install rattler-build
# or with micromamba
micromamba install rattler-build -c conda-forge

发行版软件包

Packaging status

Homebrew

你可以通过 Homebrew 安装 rattler-build

brew install rattler-build

Arch Linux

Rattler-Build 可在 Arch Linux 的 extra 仓库 中获取:

pacman -S rattler-build

Alpine Linux

Rattler-Build 可用于 Alpine Edge。启用 testing 仓库 后,可通过 apk 进行安装。

apk add rattler-build

依赖项

目前,Rattler-Build 需要主机系统上的一些依赖项,这些依赖项作为子进程执行。我们计划通过用 Rust 编写所需功能,逐步减少外部依赖项的数量,从而使 Rattler-Build 完全自包含。

  • install_name_tool 在 macOS 上是必需的,用于重写共享库和可执行文件的 rpath 以使其变为相对路径
  • patchelf 在 Linux 上是必需的,用于重写共享库和可执行文件的 rpathrunpath
  • git 是检出 Git 仓库所必需的。
  • Windows 上的 msvc,因为我们无法在 conda-forge 上分发 MSVC 编译器 (需要在主机机器上安装)

文档

我们为 Rattler-Build 提供了详尽的文档。你可以在这里找到该书籍。

GitHub Action

Rattler-Build 有一个 GitHub Action。它可以用于在 CI/CD 工作流中安装 rattler-build 并运行构建命令。请查阅 GitHub Action 文档 以获取更多信息。

用法

Rattler-Build 附带两个命令:buildtest

build 命令接受 --recipe recipe.yaml 作为输入,并生成一个包作为输出。test 子命令可用于测试现有包 (测试随包一起分发)。

还有一个终端用户界面 (TUI),可以帮助构建多个包并轻松查看日志。

游乐场

想在不安装任何内容的情况下尝试 Rattler-Build 配方吗?在线游乐场 允许你编辑配方、调整变体配置并查看评估后的输出——全部在浏览器中完成。

配方格式

注意 你可以在 examples 文件夹中找到以下所有示例,并使用 rattler-build 运行它们。

一个针对 xtensor 纯头文件 C++ 库的简单示例配方:

context:
  name: xtensor
  version: 0.24.6

package:
  name: ${{ name|lower }}
  version: ${{ version }}

source:
  url: https://github.com/xtensor-stack/xtensor/archive/${{ version }}.tar.gz
  sha256: f87259b51aabafdd1183947747edfff4cff75d55375334f2e81cee6dc68ef655

build:
  number: 0
  script:
    - if: win
      then: |
        cmake -G "Ninja" -D BUILD_TESTS=OFF -D CMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% %SRC_DIR%
        ninja install
      else: |
        cmake ${CMAKE_ARGS} -G "Ninja" -DBUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=$PREFIX $SRC_DIR -DCMAKE_INSTALL_LIBDIR=lib
        ninja install

requirements:
  build:
    - ${{ compiler('cxx') }}
    - cmake
    - ninja
  host:
    - xtl >=0.7,<0.8
  run:
    - xtl >=0.7,<0.8
  run_constraints:
    - xsimd >=8.0.3,<10

tests:
  - script:
    - if: unix or emscripten
      then:
        - test -d ${PREFIX}/include/xtensor
        - test -f ${PREFIX}/include/xtensor/xarray.hpp
        - test -f ${PREFIX}/share/cmake/xtensor/xtensorConfig.cmake
        - test -f ${PREFIX}/share/cmake/xtensor/xtensorConfigVersion.cmake
    - if: win
      then:
        - if not exist %LIBRARY_PREFIX%\include\xtensor\xarray.hpp (exit 1)
        - if not exist %LIBRARY_PREFIX%\share\cmake\xtensor\xtensorConfig.cmake (exit 1)
        - if not exist %LIBRARY_PREFIX%\share\cmake\xtensor\xtensorConfigVersion.cmake (exit 1)

about:
  homepage: https://github.com/xtensor-stack/xtensor
  license: BSD-3-Clause
  license_file: LICENSE
  summary: The C++ tensor algebra library
  description: Multi dimensional arrays with broadcasting and lazy computing
  documentation: https://xtensor.readthedocs.io
  repository: https://github.com/xtensor-stack/xtensor

extra:
  recipe-maintainers:
    - some-maintainer
`rich` Python 包的配方(使用 `noarch`)
context:
  version: "13.4.2"

package:
  name: "rich"
  version: ${{ version }}

source:
  - url: https://pypi.io/packages/source/r/rich/rich-${{ version }}.tar.gz
    sha256: d653d6bccede5844304c605d5aac802c7cf9621efd700b46c7ec2b51ea914898

build:
  # Thanks to `noarch: python` this package works on all platforms
  noarch: python
  script:
    - python -m pip install . -vv

requirements:
  host:
    - pip
    - poetry-core >=1.0.0
    - python 3.10.*
  run:
    # sync with normalized deps from poetry-generated setup.py
    - markdown-it-py >=2.2.0
    - pygments >=2.13.0,<3.0.0
    - python 3.10.*
    - typing_extensions >=4.0.0,<5.0.0

tests:
  - python:
      imports:
        - rich
      pip_check: true

about:
  homepage: https://github.com/Textualize/rich
  license: MIT
  license_file: LICENSE
  summary: Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal
  description: |
    Rich is a Python library for rich text and beautiful formatting in the terminal.

    The Rich API makes it easy to add color and style to terminal output. Rich
    can also render pretty tables, progress bars, markdown, syntax highlighted
    source code, tracebacks, and more  out of the box.
  documentation: https://rich.readthedocs.io
  repository: https://github.com/Textualize/rich
`curl` 库的配方
context:
  version: "8.0.1"

package:
  name: curl
  version: ${{ version }}

source:
  url: http://curl.haxx.se/download/curl-${{ version }}.tar.bz2
  sha256: 9b6b1e96b748d04b968786b6bdf407aa5c75ab53a3d37c1c8c81cdb736555ccf

build:
  number: 0

requirements:
  build:
    - ${{ compiler('c') }}
    - if: win
      then:
        - cmake
        - ninja
    - if: unix
      then:
        - make
        - perl
        - pkg-config
        - libtool
  host:
    - if: linux
      then:
        - openssl

about:
  homepage: http://curl.haxx.se/
  license: MIT/X derivate (http://curl.haxx.se/docs/copyright.html)
  license_file: COPYING
  summary: tool and library for transferring data with URL syntax
  description: |
    Curl is an open source command line tool and library for transferring data
    with URL syntax. It is used in command lines or scripts to transfer data.
  documentation: https://curl.haxx.se/docs/
  repository: https://github.com/curl/curl

对于此配方,需要两个额外的脚本文件(build.shbuild.bat)。

build.sh

#!/bin/bash

# Get an updated config.sub and config.guess
cp $BUILD_PREFIX/share/libtool/build-aux/config.* .

if [[ $target_platform =~ linux.* ]]; then
    USESSL="--with-openssl=${PREFIX}"
else
    USESSL="--with-secure-transport"
fi;

./configure \
    --prefix=${PREFIX} \
    --host=${HOST} \
    ${USESSL} \
    --with-ca-bundle=${PREFIX}/ssl/cacert.pem \
    --disable-static --enable-shared

make -j${CPU_COUNT} ${VERBOSE_AT}
make install

# Includes man pages and other miscellaneous.
rm -rf "${PREFIX}/share"

build.bat

mkdir build

cmake -GNinja ^
      -DCMAKE_BUILD_TYPE=Release ^
      -DBUILD_SHARED_LIBS=ON ^
      -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^
      -DCMAKE_PREFIX_PATH=%LIBRARY_PREFIX% ^
      -DCURL_USE_SCHANNEL=ON ^
      -DCURL_USE_LIBSSH2=OFF ^
      -DUSE_ZLIB=ON ^
      -DENABLE_UNICODE=ON ^
      %SRC_DIR%

IF %ERRORLEVEL% NEQ 0 exit 1

ninja install --verbose