如何在 OPAM 中列出当前包版本?
How to list current package versions in OPAM?
opam list -a
列出 OPAM 当前可用的所有包,但不显示当前未安装的包的版本号,根据 opam list --help
输出:
(...) the output format displays one package per line, and each line contains the name of the package, the installed version or -- if the package is not installed, (...)
如何列出所有软件包及其版本号?
使用opam info <packagename>
。
我猜 opam list
由于包的依赖关系,只打印已安装包的版本。列出最新版本的软件包,例如,尚未安装的软件包并不是很有用。
这不是一个理想的解决方案,但根据 camlspotter 的建议,我使用以下 shell 循环手动查询每个包的 version
字段:
for p in $(opam list -a -s); do echo "$p $(opam show -f version $p)"; done
它有效,但在我的机器上需要大约 85 秒才能完成(查询当前可用的 1000 多个包)。
anol 答案的精炼(和更快)版本是一次性将整个包列表提供给 opam show
(要求 opam
输出 package
和 version
字段),并使用 sed
处理结果,显然 show
输出每个字段在其自己的行上:
opam show -f package,version $(opam list -a -s) \
| sed -e '/ *package:/N; s/ *package: \([^\n]*\)\n *version: \([^\n]*\)/: /'
opam list -a
列出 OPAM 当前可用的所有包,但不显示当前未安装的包的版本号,根据 opam list --help
输出:
(...) the output format displays one package per line, and each line contains the name of the package, the installed version or -- if the package is not installed, (...)
如何列出所有软件包及其版本号?
使用opam info <packagename>
。
我猜 opam list
由于包的依赖关系,只打印已安装包的版本。列出最新版本的软件包,例如,尚未安装的软件包并不是很有用。
这不是一个理想的解决方案,但根据 camlspotter 的建议,我使用以下 shell 循环手动查询每个包的 version
字段:
for p in $(opam list -a -s); do echo "$p $(opam show -f version $p)"; done
它有效,但在我的机器上需要大约 85 秒才能完成(查询当前可用的 1000 多个包)。
anol 答案的精炼(和更快)版本是一次性将整个包列表提供给 opam show
(要求 opam
输出 package
和 version
字段),并使用 sed
处理结果,显然 show
输出每个字段在其自己的行上:
opam show -f package,version $(opam list -a -s) \
| sed -e '/ *package:/N; s/ *package: \([^\n]*\)\n *version: \([^\n]*\)/: /'