使用 requirements.txt 在新的 conda 环境中自动安装来自 conda 频道和 pip 的包

using requirements.txt to automatically install packages from conda channels and pip in a new conda environment

我正在尝试使用同事与我共享的 requirements.txt 文件来设置 conda 环境。我的同事在没有 Anaconda 的 Mac 中使用 Python,而我在带有 Anaconda 的 Windows 机器中使用它。文件 requirements.txt 是使用命令 pip freeze 生成的,如下所示:

absl-py==0.7.1
affine==2.3.0
agate==1.6.0
agate-dbf==0.2.0
agate-excel==0.2.1
agate-sql==0.5.2
...

检查 的答案后,我在 Anaconda 终端中尝试了以下操作:

conda create --name my-env-name --file requirements.txt

失败并显示以下错误消息:

PackagesNotFoundError: The following packages are not available from current channels:

  - appscript==1.0.1
  - style==1.1.0
  - senticnet==1.3
  - scikits.optimization==0.3
...

我的理解是,发生这种情况是因为这些软件包在 Anaconda 软件包安装通道中不可用,并且应该通过 pip 安装它们,同时激活我的 conda 环境,使用 pip install -r requirements.txt

问题是这个包列表很长,我想避免手动检查和分离哪些包包含在 Anaconda 频道中,哪些应该通过 pip 安装。那么,有没有办法告诉Anaconda通过自动识别其频道中包含的包来创建环境,安装它们,然后使用pip安装其余的?

使用 requirements.txt 和 conda

创建conda环境时使用requirements.txt文件完全没有问题

其实你也可以在创建的时候设置额外的频道:

conda create --name my-env-name --file requirements.txt --channel <NAME_OF_CHANNEL>

例如,对于您提到的第一个软件包,您可以从 anaconda 频道安装它。所以你可以 运行:

conda create --name my-env-name --file requirements.txt --channel default --channel anaconda

为什么先使用 default 频道?好吧,只是为了优先考虑默认值(频道的优先级由它们列出的顺序指定:从左到右优先级更高)。

当使用 conda 时至少有一些包不可用

好吧,当没有 conda 渠道可以提供任何您需要的包时,有几种选择:

  1. 通过 conda 安装在其任何渠道中可用的软件包。

  2. 其余部分通过pip安装。

  3. 创建 conda environment.yml 文件:

     conda env export > environment.yml
    

当你需要重新创建这个环境时,你可以这样做:

conda env create --name my-env-name --file environment.yml

它将使用 conda 安装包,将安装 pip,然后安装仅适用于后者的包。

这种方法有好有坏:

  • 一个好的特性是它将通过 conda 安装的包与使用 pip 安装的包分开。
  • 一个不好的属性是它只对 conda 有用,但对 pip 单独没有用。