11.4 以Conda包的形式发布一个简单的项目

    虽然PyPI是发布Python包的标准平台,但Anaconda (https://anaconda.org )更为可能更为流行,因为它不仅允许使用Python接口发布Python或混合项目,还允许对非Python项目进行打包和依赖关系管理。这个示例中,我们将为一个非常简单的C++示例项目准备一个Conda包,该项目使用CMake配置和构建,除了C++之外没有依赖关系。下一个示例中,我们将会来看看一个更复杂的Conda包。

    我们的目标是打包以下示例代码():

    1. CMakeLists.txt文件给出了最低版本要求、项目名称和支持的语言:

      1. cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
      2. project(recipe-04 LANGUAGES CXX)
      3. set(CMAKE_CXX_STANDARD 11)
      4. set(CMAKE_CXX_EXTENSIONS OFF)
      5. set(CMAKE_CXX_STANDARD_REQUIRED ON)
    2. 使用example.cpp构建hello-conda可执行目标:

      1. add_executable(hello-conda "")
      2. target_sources(hello-conda
      3. PRIVATE
      4. example.cpp
      5. )
    3. 使用CMakeLists.txt定义安装目标:

      1. nstall(
      2. TARGETS
      3. hello-conda
      4. DESTINATION
      5. bin
    4. 包含如下内容:

      1. package:
      2. name: conda-example-simple
      3. version: "0.0.0"
      4. source:
      5. path: .. / # this can be changed to git-url
      6. build:
      7. number: 0
      8. binary_relocation: true
      9. script:
      10. - cmake -H. -Bbuild_conda -G "${CMAKE_GENERATOR}" -DCMAKE_INSTALL_PREFIX=${PREFIX} # [not win]
      11. - cmake -H. -Bbuild_conda -G "%CMAKE_GENERATOR%" -DCMAKE_INSTALL_PREFIX="%LIBRARY_PREFIX%" # [win]
      12. - cmake - -build build_conda - -target install
      13. requirements:
      14. build:
      15. - cmake >=3.5
      16. - { { compiler('cxx') } }
      17. home: http://www.example.com
      18. summary: "Summary in here ..."
    5. 现在来构建包:

      1. $ conda build conda-recipe
    6. 过程中屏幕上看到大量输出,但是一旦构建完成,就可以对包进行安装。首先,在本地进行测试:

      1. $ conda install --use-local conda-example-simple
    7. 现在准备测试安装包,打开一个新的终端(假设Anaconda处于激活状态),并输入以下内容:

    8. 测试成功后,再移除包装:

      1. $ conda remove conda-example-simple
    1. install(
    2. TARGETS
    3. hello-conda
    4. DESTINATION
    5. bin
    6. )

    目标的二进制文件会安装到${CMAKE_INSTALL_PREFIX}/bin中。变量由Conda定义,并且构建步骤中定义在meta.yaml

    1. build:
    2. number: 0
    3. binary_relocation: true
    4. script:
    5. - cmake -H. -Bbuild_conda -G "${CMAKE_GENERATOR}" -DCMAKE_INSTALL_PREFIX=${PREFIX} # [not win]
    6. - cmake -H. -Bbuild_conda -G "%CMAKE_GENERATOR%" -DCMAKE_INSTALL_PREFIX="%LIBRARY_PREFIX%" # [win]

    将安装目录设置为${prefix} (Conda的内部变量),然后构建并安装项目。调用构建目录命名为build_conda的动机与前面的示例类似:特定的构建目录名可能已经命名为。

    配置文件meta.yaml可为任何项目指定构建、测试和安装步骤。详情请参考官方文档:

    要将Conda包上传到Anaconda云,请遵循官方的Anaconda文档: https://docs.anaconda.com/anaconda-cloud/user-guide/

    此外,也可以考虑将Miniconda,作为Anaconda的轻量级替代品: