如何将带条件标记的pip依赖转换为conda环境yaml的合法语法
pip条件依赖转conda environment.yaml语法说明
conda不支持pip原生的分号后置条件写法,需要改用conda内置的选择器语法,规则如下:
基础转换规则
把原pip依赖行末尾的; 条件表达式替换为注释格式的条件选择器# [conda条件缩写],直接放在依赖行末尾即可。
常见转换示例
平台条件转换
原pip写法:openexr==1.3.2; platform_system == 'Linux'对应conda写法:
openexr==1.3.2 # [linux]Python版本条件转换
原pip写法:dataclasses>=0.8; python_version == '3.6'对应conda写法:
dataclasses>=0.8 # [py==36]
常用条件对应表
- Linux系统:
platform_system == 'Linux'→# [linux] - Windows系统:
platform_system == 'Windows'→# [win] - macOS系统:
platform_system == 'Darwin'→# [osx] - Python版本等于3.x:
python_version == '3.x'→# [py==3x](x为次版本号,比如3.8对应py==38) - Python版本大于等于3.x:
python_version >= '3.x'→# [py>=3x] - 多条件组合:同时满足Linux + Python3.6 →
# [linux and py==36],满足任意一个条件用or连接即可
特殊情况处理
如果对应依赖仅能通过pip安装,可以直接把原有pip带条件的写法放在dependencies下的pip子节点中,不需要转换,示例完整yaml结构如下:
name: my_env channels: - defaults dependencies: - python=3.6 - scipy>=1.4.1 - openexr==1.3.2 # [linux] - dataclasses>=0.8 # [py==36] - pip: # 仅pip支持的包可以保留原有pip条件写法 - some-pip-only-package==2.0.1; platform_system == 'Windows'
注意事项
依赖包声明和条件选择器之间需要保留至少一个空格,否则conda会无法识别条件规则,仍然抛出格式错误。
内容的提问来源于stack exchange,提问作者bill
相关产品推荐
相关产品推荐

