【问题标题】:How to list the name of all Poetry extras?如何列出所有诗歌附加内容的名称?
【发布时间】:2021-07-01 01:59:45
【问题描述】:

我正在做一个项目,我需要安装所有 Poetry extras 以运行自动构建。将该列表作为空格分隔的列表以用于poetry install --extras="$extras" 的最简单方法是什么?

一些可能性:

  • 我可以使用 Python toml 包,但这需要设置一个 单独的 virtualenv 来安装它。
  • 快速的 sed 命令获取 pyproject.toml 的 tool.poetry.extras 部分并提取名称将是一种技巧,并且仅在 TOML 格式良好且一致的情况下才有效。
  • 为此下载和安装第三方 CLI 工具似乎有点过头了;我更喜欢sed hack。
  • 也许有一个常用的工具(例如,已经安装在官方 Ubuntu 20.04 Docker 映像中)可以执行此操作或类似的操作,例如将 TOML 转换为 JSON 以使用更知名的工具(如 jq)进行处理,但是我不知道。

【问题讨论】:

    标签: python python-poetry


    【解决方案1】:

    目前的hacky解决方案:TOML文件是使用pretty-format-toml格式化的,所以结构是完全统一的——一个额外的基本上是这样的:

    content_iterator = [
        "jsonschema",
        "pynamodb",
    ]
    

    基于此,我已经能够使用此命令将所有额外内容作为空格分隔的列表获取:

    echo "PYTHON_EXTRAS=$(sed --quiet '/\[tool\.poetry\.extras\]/,/^\[/{s/^\(.*\) = \[/\1/p}' pyproject.toml \
        | sed --null-data 's/\n/ /g;s/ $//')" \
        | tee -a $GITHUB_ENV
    

    基本上,在 tool.poetry.extras 部分中查找任何带有= [ 的行并打印之前的内容。然后用空格替换换行符。最后去掉尾随空格(诗很挑剔,会拒绝安装名称之间有尾随空格或换行符的附加列表)并将结果放入相关配置文件中。

    这是非常丑陋和脆弱的,所以我只是将这个发布给其他需要解决方案的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-22
      • 2022-08-20
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      • 2021-12-13
      • 2022-07-09
      • 2012-08-20
      相关资源
      最近更新 更多