如何列出 conda 可用的软件包版本有一些有用的答案,其中之一在/sf/answers/3345709041/使用两个等号。 conda search -h没有完全说明 MatchSpec 语法允许的内容,只给出了一些简单的例子。
例如,我想查看最新版本的python 下存在哪些包,对于一个名为jedi. 我不得不求助于实验和猜测来找到正确的语法,因为上面缺少 MatchSpec 语法的详细文档。我结束了:
$ condaw search 'jedi[build=py37*]' --json | grep '"build"'
"build": "py37_1",
"build": "py37_0",
"build": "py37_0",
"build": "py37_0",
"build": "py37_0",
$
Run Code Online (Sandbox Code Playgroud)
使用上面的--json选项只是为了让我可以找出哪些关键字(例如)build可能是语法的一部分。
那么,MatchSpec 语法在哪里有正式和完整的文档,这样我就不必猜测了?我现在得出的结论是-h输出是唯一的。
mer*_*erv 10
conda-build docs 中有一些(可能已经过时)文档。但是,我仍然认为他们代码中的文档更清晰。它可以从激活的读取基础env中使用
python -c "from conda.models.match_spec import MatchSpec; help(MatchSpec)"
Run Code Online (Sandbox Code Playgroud)
从技术上讲,代码文档更多是关于将MatchSpec对象序列化为字符串表示,而不是解析字符串的另一个方向,但它涵盖了所有可能性。
部分文档描述了类本身,但这里是类的字符串文字表示的相关部分:
规范字符串表示一般可以表示为
Run Code Online (Sandbox Code Playgroud)(channel(/subdir):(namespace):)name(version(build))[key1=value1,key2=value2]其中
()指示可选字段。构建规范字符串表示的规则是:
name(即"包名") 是必需的,但它的值可以是'*'。它的位置总是在键值括号之外。- 如果
version是精确版本,则它超出键值括号并以==. 如果version是一个“模糊”值(例如1.11.*),它会在键值括号之外,.*左边是关闭的,并以=. 否则version包含在键值括号内。- If
version是一个精确的版本,并且build是一个精确的值,build则超出以 a 开头的键值括号=。否则,build进入键值括号内。build_string是 的别名build。- 该
namespace职位是为未来的 conda 功能而保留的。- 如果
channel包含并且是精确值,::则在channel和之间使用分隔符name。channel可以是规范的频道名称或频道网址。在规范字符串表示中,将始终使用规范通道名称。- 如果
channel是一个精确值,并且subdir是一个精确值,subdir被附加到channel与/分离器。否则,subdir包含在键值括号中。- 键值括号可以用逗号、空格或逗号+空格分隔。值可以选择用单引号或双引号括起来,但如果
value包含逗号、空格或等号,则必须括起来。规范格式使用逗号分隔符和单引号。MatchSpec从字符串构造 :class:实例时,键值括号内给出的任何键值对都会覆盖括号外给出的任何匹配参数。
除了字符串中明确表示的字段外,还支持以下键:
build_numbertrack_featuresfeaturesurlmd5licenselicense_familyfn注: fn代表˚F ILE ñ火焰。
文档继续给出示例,展示如何使用此类MatchSpec生成这些规范字符串:
(channel(/subdir):(namespace):)name(version(build))[key1=value1,key2=value2]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
468 次 |
| 最近记录: |