Yuri的博客

还在搭建,欢迎日后来玩

0%

Win10 下本地打包 miniforge 的坑

(注:本文所说的打包是搭建conda环境 -> 用搭建好的conda环境安装constructor -> 用constructor生成安装包这样的一个流程,或许这个词不够规范,还望海涵。)

前言

突发奇想(我怎么就管不住我这双手呢.jpg)想试试在本地从源码构建一次 conda。然而在看了官方和 mamba 的 documentation 之后才发现在不预先安装好 conda 环境的情况下想要从头搭建出一个 conda 环境基本不可能。在几天的搜索后决定变更计划,转而用 miniforge 项目里用来 bootstrap 的程序 micromamba 先创建一个 conda 环境,在此之上安装 constructor,再打包出一个 miniforge 的安装包。

过程

略……(CI 多香啊我为什么就是脑抽了不肯用呢)

没有技术含量的技术总结 (笑)

  1. miniforge 的脚本是跟 git-bash 适配的,用自己安装的 msys2 或者 cygwin 可能会有坑。目测有些问题是因为 msys2 和 cygwin 的 home 目录并不是 c:\users\username,而 micromamba 和 miniforge 在读取 HOME 目录的时候可能会搞混。更重要的是 build.sh 脚本会用 uname 检测当前平台,而 git-bash 中 uname 的输出才是 MINGW*。
  2. miniforge 的 build.sh 脚本中 micromamba 的链接可能是无效的。(2022.01.22) 自行下载 micromamba,然后改脚本就行了:
    1
    2
    3
    4
    5
    6
    7
    if [[ "${TARGET_PLATFORM}" != win-* ]]; then
    MICROMAMBA_VERSION=0.17.0
    mkdir "${TEMP_DIR}/micromamba"
    pushd "${TEMP_DIR}/micromamba"
    #curl -L -O "https://anaconda.org/conda-forge/micromamba/${MICROMAMBA_VERSION}/download/${TARGET_PLATFORM}/micromamba-${MICROMAMBA_VERSION}-0.tar.bz2"
    cp "/path/to/download/micromamba-${MICROMAMBA_VERSION}-0.tar.bz2" ./
    tar -xf "micromamba-${MICROMAMBA_VERSION}-0.tar.bz2"
  3. 有一些变量是在 miniforge 的 CI 里定义的,本地编译时需要手动提供。比如,在执行 build_miniforge_win.sh 之前先 export TARGET_PLATFORM="win-64",否则在调用 constructor 时可能会报错。或者修改 build.sh,在前面添加 TARGET_PLATFORM 变量:
    1
    TARGET_PLATFORM="win-64"
  4. 想要编译 Mambaforge,需要添加变量 MINIFORGE_NAME="Mambaforge",在运行 build_miniforge_win.sh 之前先添加到环境变量 export MINIFORGE_NAME="Mambaforge",或者直接修改 Miniforge3/construct.yaml:
    1
    2
    {% set name = os.environ.get("MINIFORGE_NAME", "Mambaforge") %}
    # 修改配置后就不要添加MINIFORGE_NAME环境变量了
  5. 还是已经配置好的 github action 省时省力啊 #(趴)