Bash脚本到Conda的PIP后续安装Installation.txt

it'*_*het 6 python bash pip anaconda

在linux服务器上为Django应用安装requirements.txt文件时,我可以运行:

conda install --yes --file requirements.txt
Run Code Online (Sandbox Code Playgroud)

如果无法通过Conda(PackageNotFoundError)获得任何软件包,则会崩溃。这bash的一个班轮是一个很酷的方式要经过在时间requirements.txt文件中的一行来源

while read requirement; do conda install --yes $requirement; done < requirements.txt
Run Code Online (Sandbox Code Playgroud)

这将安装通过Conda可用的所有软件包,而不会导致第一个丢失的软件包崩溃。但是,我想通过捕获来自Conda的输出来跟踪失败的软件包,并且PackageNotFoundError在该软件包上运行pip install。

我对bash不太满意,因此希望有人可以提出建议。另一个解决方案可能是只写出一个pip-requirements.txt失败的需求的新文本文件。

nit*_*red 5

我个人认为Anaconda的环境和包管理非常出色。因此,如果您使用该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
Run Code Online (Sandbox Code Playgroud)

安装命令:

conda env update --file environment.yml
Run Code Online (Sandbox Code Playgroud)

注意:

在这里,我们设置name: root默认的anaconda环境名称。这不是如何使用condaand environment.yml文件的标准做法。理想情况下,每个python项目都应该有自己的environment.yml文件,并带有项目特定的环境名称,即name: project-name。请访问https://conda.io/docs/user-guide/tasks/manage-environments.html,了解如何使用Anaconda进行软件包管理。

  • 我个人的观点是,正是由于我上面提到的原因,使用 `conda env export` 并不是一个好主意。在您开发不打算维护的一次性应用程序的情况下,它可能非常有用。但是如果你有一个需要长期维护的项目,把环境完全转储到 `environment.yml` 文件中会在不久的将来导致很多版本冲突,因为 `environment.yml`文件使用精确的 `==` 版本控制,而包子依赖项通常使用更开放的 `&gt;=` 版本控制。 (2认同)

it'*_*het 5

找到了解决办法:

如果 conda 无法使用该软件包,请运行此命令以使用 conda 或 pip 进行安装:

while read requirement; do conda install --yes $requirement || pip install $requirement; done < requirements.txt 
Run Code Online (Sandbox Code Playgroud)

完成后,您可以使用 conda 导出环境 yaml:

conda env export > environment.yml
Run Code Online (Sandbox Code Playgroud)