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时
嗯,当康达频道无法提供您所需的任何套餐时,有几种选择:
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