使用requirements.txt文件自动从conda渠道和pip安装软件包到新的conda环境中。
使用requirements.txt文件自动从conda渠道和pip安装软件包到新的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 ...
在查看这个问题的答案后,我在Anaconda终端中尝试了以下操作:
conda create --name my-env-name --file requirements.txt
但是遇到了以下错误信息:
PackagesNotFoundError: 当前渠道中没有以下软件包: - appscript==1.0.1 - style==1.1.0 - senticnet==1.3 - scikits.optimization==0.3 ...
我理解的是,这是因为这些软件包在Anaconda的软件包安装渠道中不可用,应该通过激活我的conda环境,使用pip install -r requirements.txt
命令来安装它们。
问题是,这个软件包列表非常长,我希望避免手动检查并区分哪些软件包包含在Anaconda渠道中,哪些应该使用pip
安装。那么,有没有办法告诉Anaconda自动识别包含在其渠道中的软件包,并安装它们,然后使用pip
安装其余的软件包?
使用requirements.txt文件在conda环境中创建环境时没有任何问题。
实际上,您还可以在创建环境时设置其他频道:
conda create --name my-env-name --file requirements.txt --channel
例如,在您提到的第一个软件包的情况下,您可以从anaconda频道安装它。所以你可以运行:
conda create --name my-env-name --file requirements.txt --channel default --channel anaconda
为什么首先使用default频道?嗯,只是为了给默认频道一个优先权(频道的优先级由它们列在的顺序指定:从左到右的优先级更高)。
当至少有一些软件包在conda中不可用时,有几种替代方法:
1.通过conda安装那些任何频道中可用的软件包。
2.通过pip安装其余的软件包。
3.创建conda环境.yml文件:
conda env export > environment.yml
当您需要重新创建此环境时,可以执行以下操作:
conda env create --name my-env-name --file environment.yml
它将使用conda安装软件包,安装pip,然后仅安装后者中可用的软件包。
这种方法具有好和坏的性质:
好的性质之一是它将通过conda安装的软件包与通过pip安装的软件包分开。
坏的性质之一是它只对conda有用,而对pip本身没有用处。