Rattler-Build:一个快速的 conda 包构建器
Rattler-Build 工具和库可以从简单的配方格式创建跨平台可重定位的二进制文件/包。该配方格式深受 conda-build 和 boa 的启发,而常规 rattler-build 运行的输出是一个可以使用 pixi、mamba 或 conda 安装的包。
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
发行版软件包
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 上是必需的,用于重写共享库和可执行文件的rpath和runpathgit是检出 Git 仓库所必需的。- Windows 上的
msvc,因为我们无法在 conda-forge 上分发 MSVC 编译器 (需要在主机机器上安装)
文档
我们为 Rattler-Build 提供了详尽的文档。你可以在这里找到该书籍。
GitHub Action
Rattler-Build 有一个 GitHub Action。它可以用于在 CI/CD 工作流中安装 rattler-build 并运行构建命令。请查阅 GitHub Action 文档 以获取更多信息。
用法
Rattler-Build 附带两个命令:build 和 test。
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.sh 和 build.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