python - 以最低要求导出 Conda 环境
问题描述
将 Anaconda 环境导出到 YAML 文件的典型命令是:
conda env export --name my_env > myenv.yml
但是,一个大问题是该文件的可读性,因为它包含所有库及其所有依赖项的硬规范。Anaconda 有没有办法导出一个包含这些依赖项以使 YAML 更具可读性的最佳最小命令子集的列表?例如,如果您在 conda 环境中安装的所有内容都是pip
and scipy
,Anaconda 有没有办法意识到该文件应该只是读取:
name: my_env
channels:
- defaults
dependencies:
- scipy=1.3.1
- pip=19.2.3
这样,anaconda 环境仍将具有完全相同的规范,如果没有改进(如果上游错误已修复),并且查看 yml 文件的任何人都会理解运行代码的“要求”,在某种意义上如果他们确实想要/不能使用 conda 环境,他们会知道他们需要安装哪些软件包?
解决方案
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
)。
另一个值得注意的选项是--no-builds
标志,它将导出 YAML 中的每个包,但忽略构建说明符。这些标志以相互排斥的方式工作。
污染
如果这还不够,那么有一个名为conda-minify的外部实用程序,它提供了一些功能来导出基于依赖关系树而不是通过用户的显式规范最小化的环境。
推荐阅读
- powerbi - 时间范围内每个用户 ID 的订单数
- haskell - 列表是列还是行?
- python-3.x - 如何在 Windows 上安装 ELKI?
- typescript - TypeScript Partial of Union 抱怨分配联合值
- asp.net - 如何摆脱经常出现的git错误:补丁失败/补丁不适用?
- apache-kafka - 为什么我无法在 Kafka 中获得即时/实时当前偏移量?
- azure - 当用于 Blob 存储的 Azure REST API 使用具有前缀或标记的查询字符串时获取 403
- java - 制作一个字符串行计算器
- excel - 忽略存在值的行的数组公式
- firebase - 您可以在 Firebase 上使用不同帐户测试多台设备吗?