有conda-build 文档中的一些(可能已过时)文档 https://docs.conda.io/projects/conda-build/en/latest/resources/package-spec.html#package-match-specifications。不过,我仍然认为他们的代码中的文档更清晰。可以从激活的base环境使用
python -c "from conda.models.match_spec import MatchSpec; help(MatchSpec)"
or on GitHub 存储库 https://github.com/conda/conda/blob/master/conda/models/match_spec.py.
从技术上讲,代码文档更多的是关于序列化MatchSpec
对象的字符串表示形式,而不是解析字符串的另一个方向,但它涵盖了所有可能性。
匹配规范字符串
部分文档描述了类本身,但以下是类的字符串文字表示的相关部分:
规范的字符串表示一般可以表示为
(channel(/subdir):(namespace):)name(version(build))[key1=value1,key2=value2]
where ()
指示可选字段。构建规则
规范的字符串表示形式是:
-
name
(即“包名称”)是必需的,但其值可以是“*”。它的位置始终在键值括号之外。
- If
version
是一个精确版本,它超出了键值括号,并且前面加上==
. If version
是一个“模糊”值
(例如。1.11.*
),它超出了键值括号.*
留下并前置=
。否则version
是
包含在键值括号内。
- If
version
是一个精确版本,并且build
是一个精确值,build
超出前面带有 a 的键值括号=
。
否则,build
位于键值括号内。build_string
是一个别名build
.
- The
namespace
正在为未来的 conda 功能保留该位置。
- If
channel
包含在内并且是一个精确值,a::
之间使用分隔符channel
and name
. channel
可以是
规范频道名称或频道 URL。在规范字符串中
表示时,将始终使用规范的通道名称。
- If
channel
是一个精确值并且subdir
是一个精确值,subdir
被附加到channel
with a /
分隔器。否则,subdir
包含在键值括号中。
- 键值括号可以用逗号、空格或逗号+空格分隔。值可以选择用单精度或双精度包裹
引号,但必须换行,如果
value
包含逗号、空格或
等号。规范格式使用逗号分隔符和单个
引号。
- 构建 :class 时:
MatchSpec
来自字符串的实例,键值括号内给出的任何键值对都会覆盖任何
括号外给出的匹配参数。
支持的按键
除了字符串中显式表示的字段之外,还支持以下键:
build_number
track_features
features
url
md5
license
license_family
fn
Note: fn
stands for filename.
Examples
该文档继续给出示例,展示如何使用它MatchSpec
类来生成这些规范字符串:
>>> str(MatchSpec(name='foo', build='py2*', channel='conda-forge'))
'conda-forge::foo[build=py2*]'
>>> str(MatchSpec('foo 1.0 py27_0'))
'foo==1.0=py27_0'
>>> str(MatchSpec('foo=1.0=py27_0'))
'foo==1.0=py27_0'
>>> str(MatchSpec('conda-forge::foo[version=1.0.*]'))
'conda-forge::foo=1.0'
>>> str(MatchSpec('conda-forge/linux-64::foo>=1.0'))
"conda-forge/linux-64::foo[version='>=1.0']"
>>> str(MatchSpec('*/linux-64::foo>=1.0'))
"foo[subdir=linux-64,version='>=1.0']"