跳到主要内容

如何使用 conda-build 构建带有 C/C++ 依赖的 Python 包

·5 分钟阅读
Vasvi Sood
开源贡献者

图片来源 Mahe Iram Khan


conda-build 是一个自动化构建和分发 Python 包的应用程序。它是一个强大的工具,具有处理需要 C/C++ 或其他语言的依赖项的额外优势。这对于科学计算特别有用,因为许多 Python 包具有复杂的依赖关系,并且需要专门的库和工具。

配方概述了从源代码构建软件包所需的步骤。我们可以使用 grayskull 创建此“配方”。配方包括所有必要的信息,从下载和安装依赖项到编译源代码和创建最终软件包。然后 Conda-build 渲染配方以构建软件包。配方通常包括

  • 包含元数据的脚本。
  • 在 macOS 和 Linux 上安装软件包文件的脚本。
  • 在 Windows 上安装软件包文件的构建脚本。
  • 任何其他设置文件,具体取决于软件包的复杂性。

在本文中,我们将指导您完成使用 conda-build 构建 Python 包的过程!conda-build 可以帮助我们处理软件包最复杂的依赖项,使过程更顺畅、更高效。让我们准备好构建一个出色的 Python 包!

开始入门

先决条件

让我们开始构建自己的 Python 包。首先,您需要确保您已安装可用的 conda(例如,通过 MinicondaMiniforge)。然后,您可以使用 conda 安装 conda-build。

安装 conda-build

conda-build 通常安装在您的 base 环境中,与 conda 相邻

$ conda install -n base conda-build

创建配方模板

在本教程中,我们将引导您完成使用 Grayskull 为 PyPI 的 click 包构建配方的过程。Grayskull 是一个自动 conda 配方生成器,用于为 PyPI 上的 Python 包和 GitHub 上提供的非 PyPI 包创建配方。PyPI 是互联网上可用于 Python 包的各种存储库之一。

$ conda install grayskull
$ grayskull pypi click
注意

您可以使用 PyPI 中提供的任何软件包代替 click

执行此命令后,将生成一个名为 click 的新目录。在此目录中,您将找到一个名为 meta.yaml 的文件。此文件包含创建 conda 软件包所需的所有元数据,例如软件包名称、版本号、源代码 URL、安装说明、依赖项、许可证等。请注意,如果您没有使用 grayskull 命令,则需要手动编写脚本。您可以对 meta.yaml 文件进行任何更改,并将自己添加为软件包的维护者和分发者。

构建软件包

要构建您的 click 软件包,请从根文件夹运行此命令

$ conda build click

构建过程完成后,conda-build 将在 conda-bld 目录中生成一个软件包文件。要找到此文件,您可以使用终端中的此命令

$ conda build click --output

您现在可以通过在终端中运行此命令在本地安装软件包

$ conda install --use-local click

恭喜 🎊🎉,您已成功下载了自己的软件包!您可以修改此软件包并将其上传到 Anaconda.org

构建带有 C/C++ 依赖的软件包

使用 conda-build,包含非 Python 软件包非常简单。在此示例中,我们将添加 gcc 作为构建依赖项,并将 mylib 作为运行时依赖项。我们还将添加一个新步骤,将 mylib.cpp 编译为名为 mylib.so 的共享库。

meta.yaml 文件中,您可以包含以下内容并再次构建软件包

build:
script:
- g++ -o mylib.so -shared -fPIC mylib.cpp
- cp mylib.so "{{ PREFIX }}/lib"

requirements:
build:
- gcc
run:
- mylib
注意

此示例为教学目的而有意简化。它没有解决 host 依赖项、make 等构建工具、ABI 兼容性等问题。例如,conda-build 用户通常依赖 Jinja 模板来获取平台的正确编译器,而不是直接硬编码编译器 (gcc)。

查看 compiler() 函数的文档。对于实际示例,您可以查看 conda-forge 搜索中的一些配方。

测试软件包

成功创建软件包后,我们现在可以继续在我们的机器上创建另一个 conda 环境并使用新创建的软件包。此外,我们还可以将软件包上传到 Anaconda.org 并将其分发给其他人或创建我们的频道。

要在我们的本地计算机上安装软件包,我们将为我们的软件包创建一个新的 conda 环境,激活它,然后安装我们的软件包。您可以使用以下命令执行此操作

$ conda create -n test_env
$ conda activate test_env
$ conda install --use-local click

使用以下命令将您的软件包上传到 Anaconda.org

$ conda install -n base anaconda-client  # if you don't have it yet
$ anaconda upload /path/to/my_package-1.0-0.tar.bz2

您可以将您的软件包上传到您有权访问的任何现有频道,包括您自己创建的频道,并将其分发给其他人。了解更多关于 创建自定义频道 的信息。

结论

总之,使用 conda-build 创建和管理 Python 软件包可以简化软件包的分发和安装过程。借助 conda-build,您无需重新发明轮子或从头开始编写代码 - 相反,您可以依赖预构建的软件包,并将任何非 Python 依赖项轻松集成到您的项目中。Conda-build 可以用作满足您所有软件包管理需求的一站式解决方案。