(注:本文所说的打包是搭建conda环境 -> 用搭建好的conda环境安装constructor -> 用constructor生成安装包
这样的一个流程,或许这个词不够规范,还望海涵。)
前言
突发奇想(我怎么就管不住我这双手呢.jpg)想试试在本地从源码构建一次 conda。然而在看了官方和 mamba 的 documentation 之后才发现在不预先安装好 conda 环境的情况下想要从头搭建出一个 conda 环境基本不可能。在几天的搜索后决定变更计划,转而用 miniforge 项目里用来 bootstrap 的程序 micromamba 先创建一个 conda 环境,在此之上安装 constructor,再打包出一个 miniforge 的安装包。
过程
略……(CI 多香啊我为什么就是脑抽了不肯用呢)
没有技术含量的技术总结 (笑)
- miniforge 的脚本是跟 git-bash 适配的,用自己安装的 msys2 或者 cygwin 可能会有坑。目测有些问题是因为 msys2 和 cygwin 的 home 目录并不是 c:\users\username,而 micromamba 和 miniforge 在读取 HOME 目录的时候可能会搞混。更重要的是 build.sh 脚本会用
uname
检测当前平台,而 git-bash 中uname
的输出才是 MINGW*。 - miniforge 的 build.sh 脚本中 micromamba 的链接可能是无效的。(2022.01.22) 自行下载 micromamba,然后改脚本就行了:
1
2
3
4
5
6
7if [[ "${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" - 有一些变量是在 miniforge 的 CI 里定义的,本地编译时需要手动提供。比如,在执行
build_miniforge_win.sh
之前先export TARGET_PLATFORM="win-64"
,否则在调用 constructor 时可能会报错。或者修改 build.sh,在前面添加TARGET_PLATFORM
变量:1
TARGET_PLATFORM="win-64"
- 想要编译 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环境变量了 - 还是已经配置好的 github action 省时省力啊 #(趴)