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

Python 使用requirements.txt在新的conda环境中自动安装来自conda Channel和pip的软件包,python,pip,anaconda,conda,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 ... 在

我正试图使用一个同事与我共享的
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
...
在检查的答案后,我在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软件包安装通道中不可用,而应该在激活我的conda环境的情况下,使用
pip install-r requirements.txt
通过
pip
安装它们


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

使用conda的
requirements.txt

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

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

conda create --name my-env-name --file requirements.txt --channel <NAME_OF_CHANNEL>
为什么要先使用默认频道?好吧,只需优先选择默认通道(通道的优先级由它们列出的顺序指定:从左到右的更高优先级)

当至少部分软件包无法使用conda时 嗯,当康达频道无法提供您所需的任何套餐时,有几种选择:

  • 通过conda安装其任何通道中可用的软件包

  • 通过pip安装其余部分

  • 创建一个conda
    environment.yml
    文件:

     conda env export > environment.yml
    
  • 当需要重新创建此环境时,可以执行以下操作:

    conda env create --name my-env-name --file environment.yml
    
    它将使用conda安装软件包,将安装pip,然后将安装那些仅适用于后者的软件包

    这种方法有好的特性和坏的特性:

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

    requirements.txt
    的格式与康达期望的输出格式不同。请看这里:
    conda env create --name my-env-name --file environment.yml