在Linux服务器上安装Django应用程序的requirements.txt文件时,我可以运行:
conda install --yes --file requirements.txt
如果通过Conda(PackageNotFoundError
)无法使用任何软件包,则会崩溃。这个bash one liner是一种很酷的方式,可以一次一行地访问requirements.txt文件source:
while read requirement; do conda install --yes $requirement; done < requirements.txt
这将安装通过Conda可用的所有软件包,而不会在第一个丢失的软件包上崩溃。但是,我想通过捕获Conda的输出来跟踪失败的软件包,如果有PackageNotFoundError
,则在软件包上运行pip install。
我对bash不太满意,所以希望有人能提出建议。另一种解决方案可能是写出一个名为pip-requirements.txt
的新文本文件,其中包含失败的要求。
答案 0 :(得分:3)
就个人而言,我发现Anaconda环境&amp;包裹管理非常出色。因此,如果您使用conda
命令在python环境中更新软件包,那么我建议使用environment.yml
文件而不是requirements.txt
。
environment.yml
应如下所示:
name: root # default is root
channels:
- defaults
dependencies: # everything under this, installed by conda
- numpy==1.13.3
- scipy==1.0.0
- pip: # everything under this, installed by pip
- Flask==0.12.2
- gunicorn==19.7.1
要安装的命令:
conda env update --file environment.yml
这里我们设置name: root
这是默认的anaconda环境名称。这不是如何使用conda
和environment.yml
文件的标准做法。理想情况下,每个python项目都应该有自己的environment.yml
文件,该文件具有项目特定的环境名称,即name: project-name
。请使用Anaconda进行https://conda.io/docs/user-guide/tasks/manage-environments.html进行包管理。
答案 1 :(得分:1)
将stderr重定向到文件:
while read requirement; do conda install --yes $requirement; done < requirements.txt 2>error.log
答案 2 :(得分:1)
找到解决方案:
如果包不能用于conda,请运行此命令以使用conda或pip进行安装:
ExplicitArgumentBarrier
完成后,您可以使用conda导出环境yaml:
while read requirement; do conda install --yes $requirement || pip install $requirement; done < requirements.txt