使用 requirements.txt 在新的 conda 环境中自动安装来自 conda 频道和 pip 的包
using requirements.txt to automatically install packages from conda channels and pip in a new conda environment
我正在尝试使用同事与我共享的 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: 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
安装它们,同时激活我的 conda 环境,使用 pip install -r requirements.txt
问题是这个包列表很长,我想避免手动检查和分离哪些包包含在 Anaconda 频道中,哪些应该通过 pip
安装。那么,有没有办法告诉Anaconda通过自动识别其频道中包含的包来创建环境,安装它们,然后使用pip
安装其余的?
使用 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 渠道可以提供任何您需要的包时,有几种选择:
通过 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 环境。我的同事在没有 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
...
检查
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
安装它们,同时激活我的 conda 环境,使用 pip install -r requirements.txt
问题是这个包列表很长,我想避免手动检查和分离哪些包包含在 Anaconda 频道中,哪些应该通过 pip
安装。那么,有没有办法告诉Anaconda通过自动识别其频道中包含的包来创建环境,安装它们,然后使用pip
安装其余的?
使用 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 渠道可以提供任何您需要的包时,有几种选择:
通过 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 单独没有用。