创建 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
安装 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 :-(