【已解决】如何导出 package 之间的依赖关系为列表?

仅限已经安装的包(installed、dependency)。

找了一圈只发现一个七年前的相关项目,但它是针对整个 elpa 的:

(defun get-pkg-reqs-alist ()
  (cl-loop for pkg-and-desc in package-alist
           for pkg = (car pkg-and-desc)
           for desc = (cadr pkg-and-desc)
           for req-names = (cl-loop for it in (package-desc-reqs desc) collect (car it))
           collect (cons pkg req-names)))

(setq info (get-pkg-reqs-alist))

(with-temp-file "/tmp/g.dot"
  (insert "digraph G {")
  (insert (mapconcat #'identity
                     (cl-loop for pkg-reqs in info
                              for pkg = (car pkg-reqs)
                              for reqs = (cdr pkg-reqs)
                              nconcing (cl-loop for req in reqs
                                                collect (format "\"%s\" -> \"%s\";\n" pkg req)))))
  (insert "}"))

抛砖引玉,上面的代码可以生成一个 graphviz dot 文件。

6 个赞

感谢感谢!你太棒了!我的本意就是导出一个列表然后用 Graphviz 分析依赖关系。

现在我可以直接学习你的代码,暂时不用绞尽脑汁学其他不着头脑的 elisp 知识了。

:smiling_face_with_three_hearts: