使用Requirements.txt在新的conda环境中自动从conda渠道安装软件包并点子化

时间:2020-08-12 15:35:34

标签: python pip anaconda conda

我正在尝试使用同事共享给我的requirements.txt文件来设置conda环境。我的同事在不带Anaconda的Mac中使用Python,而我在带Anaconda的Windows计算机中使用Python。文件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
...

检查了this question的答案后,我在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 pip install -r requirements.txt安装它们>

问题在于此软件包列表非常长,我希望避免手动检查和分隔Anaconda通道中包括哪些软件包以及应通过pip安装哪些软件包。然后,是否有一种方法可以告诉Anaconda通过自动识别其渠道中包含的软件包,安装它们,然后使用pip安装其余的软件包来创建环境?

1 个答案:

答案 0 :(得分:1)

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无效。