使用“ conda Install —— yes —— file requments.txt”只安装可用的包而不出错

通过以下命令使用 Conda 将包安装到 Requments.txt 中

conda install --yes --file requirements.txt

如果 requments.txt 中的包不可用,那么它会抛出一个“ No package error”,如下所示:

使用 Anaconda Cloud api 站点 https://api.anaconda.org

获取包元数据: ... 。

错误: 在当前的 linux-64通道中没有找到匹配的包: nimfa = = 1.2.3

你可以在 anaconda.org 上搜索这个软件包

anaconda search -t conda nimfa ==1.2.3

不抛出错误,是否可以改变这种行为,以便它将所有可用的包安装在 requments.txt 中,并对那些不可用的包抛出警告?

我希望这样,因为,包 nifa 的错误说是不可用的,可以点安装。因此,如果我可以改变 conda install --yes --file requirements.txt的行为,只是抛出一个不可用包的警告,那么我可以使用命令 pip install -r requirments.txt in 来跟踪它。Yml 所以 TravisCI 尝试从任何可用的地方安装它。

79846 次浏览

I ended up just iterating over the lines of the file

$ while read requirement; do conda install --yes $requirement; done < requirements.txt

Edit: If you would like to install a package using pip if it is not available through conda, give this a go:

$ while read requirement; do conda install --yes $requirement || pip install $requirement; done < requirements.txt

编辑 : 如果你正在使用 Windows (学分归于 @ Clay) :

$ FOR /F "delims=~" %f in (requirements.txt) DO conda install --yes "%f" || pip install "%f"

您可以按照 这个中提到的那样做

Export to .yml file

conda env export > freeze.yml

复制:

conda env create -f freeze.yml

For those looking, I used this as @TillHoffmann 's solution for the fish shell:

$ while read requirement; conda install --yes $requirement; end < requirements.txt

还有

$ while read requirement; conda install --yes $requirement;or pip install $requirement; end < requirements.txt

Pbms 的答案是正确的方法,假设您有一个可以复制的现有环境。Conda 完全能够安装 Conda 软件包和 pip 软件包,如 environment.yml所列。我想更详细地记录整个过程。注意,我使用的是基于文件夹的环境,这就是为什么我将 --prefix [path to environment folder]添加到大多数命令中的原因。

假设您将现有项目的环境安装到当前文件夹中名为 env的文件夹中,如下所示:

conda create --prefix ./env

您可以像下面这样为该项目的环境生成 environment.yml:

conda env export --prefix ./env > environment.yml

通过将 environment.yml复制到其他文件夹中,然后从那里运行它,可以在其他文件夹中创建一个新环境:

conda env create --prefix ./env --file environment.yml

通过再次将 environment.yml复制到那里,然后从那里运行它,您将得到一个已经存在的与 environment.yml匹配的环境:

conda env update --prefix ./env --file environment.yml --prune

当有问题的环境处于活动状态时,您可以像下面这样验证它的包的状态:

conda list

这是该命令可能打印内容的缩略版(请注意 pip 包被标记为 pypi) :

# Name                    Version                   Build  Channel
pip                       19.2.2                   py37_0
python                    3.7.4                h5263a28_0
numpy                     1.16.4           py37h19fb1c0_0
pandas                    0.25.1           py37ha925a31_0
pyodbc                    4.0.27           py37ha925a31_0
ibm-db                    3.0.1                    pypi_0    pypi
ibm-db-sa                 0.3.5                    pypi_0    pypi

最后,这是 environment.yml的一个缩略版本(请注意 pip 包在它们自己的类别中列出) :

dependencies:
- pip=19.2.2=py37_0
- python=3.7.4=h5263a28_0
- numpy=1.16.4=py37h19fb1c0_0
- pandas=0.25.1=py37ha925a31_0
- pyodbc=4.0.27=py37ha925a31_0
- pip:
- ibm-db==3.0.1
- ibm-db-sa==0.3.5

Be aware that using Conda and pip together can cause some heartburn because they can unknowingly blow away each other's dependencies. You are supposed to install all of your Conda packages first and then all of your pip packages afterward, rather than alternating between the two. If your environment breaks, the official recommendation is to delete and recreate it (from your environment.yml file). For more details, see this guide:

Https://www.anaconda.com/using-pip-in-a-conda-environment/