Conda: Creating Custom Channels

 20th August 2020 at 2:19pm

创建 Conda 自定义 channels。这个功能适用于这些场景:

  • 你想在没有网络条件的机器上离线安装一些包
  • 你有私有的 Python / 其他包,想通过 conda 来安装,你可以把这些包 build 好放自定义的 channel 中

这个文档描述第一种需求。

下面以在一个没有访问外网能力的机器上安装 Conda 并安装 Ansible 作为示例,描述怎样实现离线使用 Conda。这个方案不使用 conda env,只用默认的 env(root),但是道理是相通的。

首先你需要在有网络的机器上,安装一个 全新的 Conda,并用 Conda 安装 Ansible:

# Download miniconda from https://conda.io/miniconda.html
sh Miniconda2-latest-Linux-x86_64.sh -b      # silent install
<conda_dir>/bin/conda install -c conda-forge ansible
<conda_dir>/bin/conda install mysql-python   # Ansible mysql_db module relies on this

这时你的 <conda-dir>/pkgs 里面会有 ansible, mysql-python 的包以及他们的依赖包。把这些包拷贝到一个单独的 channel 目录:

mkdir -p ~/conda-channel/linux-64
mkdir -p ~/conda-channel/noarch

cp <conda_dir>/pkgs/*.bz2 ~/conda-channel/linux-64

如果你不确定你的包是不是 linux-64 的,看看 pkgs/urls.txt 文件。

安装 conda-build,并为 conda-channel 目录建索引:

<conda_dir>/bin/conda install conda-build
<conda_dir>/bin/conda index ~/conda-channel/linux-64 ~/conda-channel/noarch

conda index 会在相应的目录下建 repodata.json repodata.json.bz2 文件。把整个 conda-channel 目录打包,复制到你的目标环境(没有网络的环境),并解包。安装 Conda 后,用这个命令来安装 Ansible:

<conda_dir>/bin/conda install ansible mysql-python -c file://<conda_channel_dir> --override-channels

--override-channels 让 Conda 不去查询默认的(defaults)channel,只用 -c 选项给出的 channel 地址。

其他选择

conda install 本身提供了 --offline 参数,可以从本地的缓存 <conda>/pkgs 中安装包。但是如果你把一个有网络条件的 Conda 中的 pkgs 下的包拷贝到新的 Conda 中,用 --offline 参数安装时总会报错。Does not work :-(

参考