通过以下命令使用 Conda 在 requirements.txt 中安装软件包时
conda install --yes --file requirements.txt
如果 requirements.txt 中的包不可用,则会引发“无包错误”,如下所示:
使用 Anaconda Cloud api 站点 https://api.anaconda.org 获取包元数据:.... org with anaconda search -t conda nimfa ==1.2.3
除了抛出错误之外,是否可以更改此行为,以便在 requirements.txt 中安装所有可用的包,并对不可用的包发出警告?
我想要这个,因为错误说的包 nimfa 不可用,可以 pip 安装。因此,如果我可以将 conda install --yes --file requirements.txt
的行为更改为只对不可用的包发出警告,我可以在 .travis.yml 中使用命令 pip install -r requirments.txt
跟进它,以便 TravisCI 尝试从它可用的任何地方安装它。
我最终只是迭代了文件的行
$ while read requirement; do conda install --yes $requirement; done < requirements.txt
编辑:如果你想使用 pip 安装一个包,如果它不能通过 conda 使用,试试这个:
$ 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"
您可以按照 this 中所述执行此操作
导出到 .yml 文件
conda env export > freeze.yml
重现:
conda env create -f freeze.yml
假设您有一个现有的环境可以复制,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
请注意,同时使用 Conda 和 pip 可能会导致一些胃灼热,因为它们会在不知不觉中消除彼此的依赖关系。您应该先安装所有 Conda 包,然后再安装所有 pip 包,而不是在两者之间交替。如果您的环境中断,官方建议删除并重新创建它(从您的 environment.yml
文件中)。有关更多详细信息,请参阅本指南:
https://www.anaconda.com/using-pip-in-a-conda-environment/
对于那些寻找的人,我将其用作@TillHoffmann 的鱼壳解决方案:
$ while read requirement; conda install --yes $requirement; end < requirements.txt
和
$ while read requirement; conda install --yes $requirement;or pip install $requirement; end < requirements.txt
不定期副业成功案例分享
pip install
使用conda install
不可用的包?FOR /F "delims=~" %f in (requirements.txt) DO conda install --yes "%f" || pip install "%f"
效果很好。谢谢!while read req; do if [[ $req != "#"* ]]; then conda install --yes $requirement || pip install $requirement; fi; done < requirements.txt