为了账号安全,请及时绑定邮箱和手机立即绑定

以最低要求导出 Conda 环境

以最低要求导出 Conda 环境

森栏 2023-10-26 10:38:21
将 Anaconda 环境导出到 YAML 文件的典型命令是:conda env export --name my_env > myenv.yml然而,一个巨大的问题是该文件的可读性,因为它包含所有库及其所有依赖项的硬规范。Anaconda 有没有办法导出最佳最小命令子集的列表,该列表将包含这些依赖项以使 YAML 更具可读性?例如,如果您在 conda 环境中安装的所有内容都是pip和scipy,那么 Anaconda 是否有办法意识到该文件应该只读取:name: my_env channels:   - defaults dependencies:   - scipy=1.3.1   - pip=19.2.3这样,即使没有改进(如果修复了上游错误),anaconda 环境仍将具有完全相同的规范,并且任何查看 yml 文件的人都会理解运行代码“需要”什么,从某种意义上说如果他们确实想要/无法使用 conda 环境,他们会知道需要安装哪些软件包?
查看完整描述

2 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

Conda CLI 中的选项

这就是--from-history旗帜的用途,但不完全是这样。它不会包含每个包的确切构建信息,而是仅包含所谓的显式规范,即用户通过 CLI 显式请求的规范(例如,conda install scipy=1.3.1)。试试:

conda env export --from-history --name my_env > myenv.yml

仅当用户最初在安装过程中包含版本时,这才会包含版本。因此,创建新环境很可能不会使用完全相同的版本和构建。另一方面,如果用户最初包含版本和构建之外的附加约束,它们也将被包含(例如,通道规范conda install conda-forge::numpy将导致conda-forge::numpy)。

另一个值得注意的选项是 flag --no-builds,它将导出 YAML 中的每个包,但忽略构建说明符。这些标志以互斥的方式工作。


污染

如果这还不够,那么有一个名为conda-minify 的外部实用程序,它提供了一些功能来导出基于依赖关系树而不是通过用户的显式规范最小化的环境。


查看完整回答
反对 回复 2023-10-26
?
largeQ

TA贡献2039条经验 获得超7个赞

看看pipreqs。它仅根据您在项目中明确执行的导入创建一个requirements.txt 文件(您甚至可以选择--no-pin忽略版本号)。您稍后可以使用此文件通过conda install --file requirements.txt.

但是,如果您的目标是evironments.yml文件,则必须手动创建它。但这只是从 clean 中复制并粘贴requirements.txt。您只需将 conda 与“仅 pip”安装分开即可。


查看完整回答
反对 回复 2023-10-26
  • 2 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信