如何使用 conda MatchSpec?

2024-01-16

如何列出 conda 可用的软件包版本 https://stackoverflow.com/questions/43222407/how-to-list-package-versions-available-with-conda/47556256#47556256有有用的答案,其中之一位于https://stackoverflow.com/a/47795843/257924 https://stackoverflow.com/a/47795843/257924它使用两个等号。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",
$ 

以上--json使用选项只是为了让我可以找出哪些关键字,例如build可能是语法的一部分。

那么,MatchSpec 语法在哪里有正式且完整的文档记录,这样我就不必猜测了?我现在的结论是-h输出是唯一的。


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 ()指示可选字段。构建规则 规范的字符串表示形式是:

  1. name(即“包名称”)是必需的,但其值可以是“*”。它的位置始终在键值括号之外。
  2. If version是一个精确版本,它超出了键值括号,并且前面加上==. If version是一个“模糊”值 (例如。1.11.*),它超出了键值括号.*留下并前置=。否则version是 包含在键值括号内。
  3. If version是一个精确版本,并且build是一个精确值,build超出前面带有 a 的键值括号=。 否则,build位于键值括号内。build_string是一个别名build.
  4. The namespace正在为未来的 conda 功能保留该位置。
  5. If channel包含在内并且是一个精确值,a::之间使用分隔符channel and name. channel可以是 规范频道名称或频道 URL。在规范字符串中 表示时,将始终使用规范的通道名称。
  6. If channel是一个精确值并且subdir是一个精确值,subdir被附加到channel with a /分隔器。否则,subdir包含在键值括号中。
  7. 键值括号可以用逗号、空格或逗号+空格分隔。值可以选择用单精度或双精度包裹 引号,但必须换行,如果value包含逗号、空格或 等号。规范格式使用逗号分隔符和单个 引号。
  8. 构建 :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']"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 conda MatchSpec? 的相关文章

  • conda:从基本/根环境中删除所有已安装的软件包

    TL DR 如何删除所有已安装的软件包base 我在我的计算机中安装了一堆机器学习包base康达环境 我现在创建了一个ml机器学习环境 并希望重置我的base环境 删除安装在那里的所有软件包 我试过了 activate base conda
  • 如何使用 .yml 文件更新现有 Conda 环境

    如何使用另一个 yml 文件更新预先存在的 conda 环境 当处理具有多个需求文件的项目时 这非常有用 即base yml local yml production yml etc 例如 下面是一个base yml文件有 conda fo
  • 如何在 conda 环境中启动 exe

    我在 Windows 10 中使用 vscode 作为代码编辑器 并希望找到一种简单的方法来使用正确的 conda env 启动它以进行调试 目前 我必须打开命令提示符 然后激活 conda env 然后将 vscode 的快捷方式粘贴到提
  • Conda 与 Mamba 的困惑 - 构建自定义 docker 镜像时应该使用什么

    我正在尝试使用构建自定义 Docker 映像jupyter datascience notebook这是基于jupyter base notebook 我可以看到 mamba 用于为 jupyter 安装 配置 conda 环境 下面是我的
  • anaconda 中使用的 Gcc 版本的 python

    如何更改 anaconda 或虚拟环境中使用的 python gcc 版本 现在当我启动 python 时它显示 GCC 4 4 7 20120313 Red Hat 4 4 7 1 在linux2上 这与系统范围内的相同gcc in us
  • setup.py 与 conda 安装的依赖项(不是 pip)

    我正在开发一个现有的 Python 3 代码库 它提供了setup py因此代码作为 Python 库安装 我正在尝试安装这个内部库及其自己的依赖项 通常的数据科学库 例如pandas pyodbc sqlalchemy etc 我希望有这
  • conda 内部是如何工作的?

    我搜索了一段时间但找不到满意的答案 康达 http conda pydata org http conda pydata org 在内部工作 任何细节欢迎 此外 由于它与 python 无关并且显然工作得如此良好和流畅 为什么它不被用作像
  • Conda 将一个环境.yml 导入另一个环境

    考虑将具有依赖项的 Python 子模块导入到具有其自己的依赖项的项目中的情况 假设子模块有它的environment yml文件和项目本身有一个environment yml file 有没有办法创建一个包含这两种环境规范的环境 如果是的
  • mini conda vs anaconda - 安装环境最佳实践问题

    我是 miniconda 和 anaconda 的新手 我只是想了解 anaconda 与 miniconda 的意见 希望找出更适合我的需求 目前我已经安装了 miniconda 每次我想要处理一个项目时 我都必须在项目文件夹中创建一个新
  • 无法使用 conda 安装 mpi4py 并指定预安装的 mpicc 路径

    我已经尝试安装mpi4py with env MPICC path to openmpi bin mpicc conda install c anaconda mpi4py 但我收到这样的消息 The following NEW packa
  • 使用自己的路径在不同的 python 可执行文件下生成 multiprocessing.Process

    我有两个版本的Python 实际上是两个conda环境 path to bin 1 python path to bin 2 python 我想从一个版本的 python 启动一个在另一个版本中运行的函数 使用类似multiprocessi
  • 如何释放 (ana)conda 占用的磁盘空间?

    我经常使用 conda 包管理器 到目前为止 我有相当多的环境和大量下载的软件包 占用了我的 SSD 上的大量空间 释放部分空间的一个明显途径是使用以下命令 conda env export gt environment yml from
  • 配置:错误:找不到 CGAL 库

    我的最终目标就是获取python包graph tool在我的系统上工作 如果可能的话 也在 ipynb 上工作 我已经brew install graph tool 如此处所示 https git skewed de count0 grap
  • 无法在 osx-arm64 上安装 Python 3.7

    我正在尝试使用 Conda 创建一个带有 Python 3 7 的新环境 例如 conda create n qnn python 3 7 我收到以下错误 Collecting package metadata current repoda
  • 如何在 Jupyter Notebook 中选择 conda 环境

    我安装了 Anaconda 5 3 和 Python 3 7 根环境 之后我使用 Python 3 6 创建了一个新环境 py36 我激活了新环境activate py36 conda env list表明环境是活跃的 但是当我启动 Jup
  • jupyter笔记本在不同的环境中运行内核

    我已经让自己陷入了某种可怕的虚拟环境混乱之中 帮助 我管理环境conda 直到最近 我只有一个 python2 jupyter 笔记本内核 但我决定把自己拖到 21 世纪 安装了一个 python3 内核 我忘了我是怎么做到的 我的主要 a
  • 如何通知 conda 安装更高版本的 apache-beam?

    我是 Conda 新手 正在尝试使用 miniconda 安装 python 包 apache beam 来熟悉它 我可以看到https anaconda org conda forge apache beam https anaconda
  • 更新 pip 不起作用

    我陷入了困境 Conda 一直告诉我升级 pip 但是 当我运行 conda update pip 命令时 它说 pip 已完全更新 我的确切终端输出如下 Anton MacBook Pro anton conda update pip p
  • Anaconda:ModuleNotFoundError:没有名为“conda”的模块

    请注意 此错误与 stackoverflow 中显示的错误 并有答案 不同 它绝对不是重复的 我以前见过这个错误 并且能够通过修改 PATH 以包含 conda 的路径来修复它 如下所示 export PATH opt cloudera p
  • 如何让“conda”安装程序查找“PyPi”包

    我试图使用conda http conda pydata org docs using pkgs html managing packages包管理器来安装我的 Python 包 最近 我遇到了 Anaconda org 存储库中不存在我需

随机推荐