python - 如何列出所有诗歌附加内容的名称?
问题描述
我正在做一个项目,我需要安装所有 Poetry extras 以运行自动构建。将该列表作为空格分隔的列表以用于 in 的最简单方法是什么poetry install --extras="$extras"
?
一些可能性:
- 我可以使用 Python toml 包,但这需要设置一个单独的virtualenv 来安装它。
- 获取 pyproject.toml 部分并提取名称的快速
sed
命令tool.poetry.extras
将是一个 hack,并且仅在 TOML 格式良好且一致的情况下才有效。 - 仅仅为此下载和安装第三方 CLI 工具似乎有些矫枉过正;我更喜欢
sed
黑客攻击。 - 也许有一个常用的工具(例如,已经安装在官方的 Ubuntu 20.04 Docker 映像中)可以执行此操作或类似的操作,例如将 TOML 转换为 JSON 以使用更知名的工具进行处理
jq
,但我不知道它。
解决方案
当前的 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 部分中查找任何行= [
并打印之前的内容。然后用空格替换换行符。最后删除尾随空格(诗歌很挑剔,并且会拒绝安装名称之间有尾随空格或换行符的附加列表)并将结果放入相关配置文件中。
这是非常丑陋和脆弱的,所以我只是为其他现在需要解决方案的人发布这个。
推荐阅读
- mysql - 根据 GROUP 和 LIMIT 获取唯一的每一行?
- python - Python中的字符数
- ajax - 在 Laravel 中提交模态框表单
- android - 如何在带有参数的android中设计惰性持有者模式?
- xamarin - 如何将 Xamarin Forms Checkbox isChecked 绑定到动态布尔变量?
- swift - “模棱两可的使用”和受约束的泛型函数
- javascript - CSS登录功能如何在页面上保持静止
- turbo-c++ - Turbo C++ 文件处理:卡在输入循环中
- excel - 在 Excel 中的不同工作表上匹配名字和姓氏
- r - 如果与另一列中的值匹配,则将列中的值替换为“空白”