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

Lui*_*ise 11 python pip anaconda conda

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
...
Run Code Online (Sandbox Code Playgroud)

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

conda create --name my-env-name --file requirements.txt
Run Code Online (Sandbox Code Playgroud)

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

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
...
Run Code Online (Sandbox Code Playgroud)

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

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

Nic*_*ica 20

requirements.txt与康达一起使用

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

事实上,您还可以在创建时设置其他通道:

conda create --name my-env-name --file requirements.txt --channel <NAME_OF_CHANNEL>
Run Code Online (Sandbox Code Playgroud)

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

conda create --name my-env-name --file requirements.txt --channel default --channel anaconda
Run Code Online (Sandbox Code Playgroud)

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

当至少某些软件包无法使用 conda 时

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

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

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

  3. 创建一个 condaenvironment.yml文件:

     conda env export > environment.yml
    
    Run Code Online (Sandbox Code Playgroud)

当您需要重新创建此环境时,您可以执行以下操作:

conda env create --name my-env-name --file environment.yml
Run Code Online (Sandbox Code Playgroud)

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

这种方法有好有坏:

  • 良好的特性之一是它将通过 conda 安装的软件包与使用 pip 安装的软件包分开。
  • 不好的特性之一是它只对 conda 有用,而不能单独对 pip 有用。