14

I tried to delete package X (in order to try an older built-in version). But when I restart emacs, it's automatically re-installed. package-list-packages lists it as a dependency so that behaviour seems reasonable, actually quite smart. The trouble is, I can't see what other package has created the dependency. I've tried visiting all the 'installed' and most of the 'dependency' packages in (package|paradox)-list-packages but X does not show up as a dependency.

I'd prefer to know how to find out this information, but X is org-plus-contrib-20181230 (I won't be uninstalling this permanently, it's just curiosity).

2
  • 1
    Use M-x package-delete to delete the package, and it will tell you what package depends on it. Commented Jul 12, 2021 at 14:24
  • Duh! Of course - you're right. That's (rpm -e <pkg>) what I used to do with RPM before I discovered --whatrequires. Thanks for pointing it out. Commented Jul 13, 2021 at 22:08

3 Answers 3

4

All packages are in ~/.emacs.d/elpa
Package dependencies are listed in files ending with "-pkg.el" in each package directory.

To find which packages require some package, find "-pkg.el"'s that contain that package's name.

Using M-x rgrep:

Example: find all packages that require "popup" package.

M-x rgrep prompts:

Search for:

Each dependency is in a list, so the name starts with a "(", then goes package name, one or more spaces, and a double quote(") of a version string.
So, use basic regular expression to find a string in this format: (popup "

Search for: (popup \+"
Search for "(popup \+"" in files matching wildcard: *pkg.el
Base directory: /home/somename/.emacs.d/elpa/

Result:

A *grep* buffer with links to all packages that depend on popup.

UPD

In such situations just M-x rgrep everything.
I grepped all my Emacs installation for a "contrib" word. And there' a NEWS org file that logs all changes in new versions.
In version 7.9.2, about that "//orgmode.org/elpa/":

You can now add the Org ELPA repository like this:

(add-to-list 'package-archives '("org" . "https://orgmode.org/elpa/") t)

It contains both the =org-.tar= package (the core Org distribution, also available through https://elpa.gnu.org) and the =org-plus.tar= package (the extended Org distribution, with non-GNU packages from the =contrib/= directory.)

3
  • Works nicely - thanks for the code and the theory. In my case, popup is a dependency of dumb-jump. Unfortunately, org-plus-contrib is not a dependency of anything after all! So there is some other reason that it keeps getting installed. It's not a problem as I normally want it, it's just something else that I don't quite understand!!! Commented Jan 13, 2019 at 5:46
  • @wef Strange thing, I don't know where that org-plus-contrib comes from. It's not on MELPA, not on github. Commented Jan 13, 2019 at 11:29
  • 1
    Alex - it's from org-mode's own package repo by the look of it. My config (derived from ohai-emacs) includes these: (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) (add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t) - confusingly, the (built-in?) gnu repo has an 'org' package at version 20181230 and the org-mode repo has org-plus-contrib at the same version. I'm trying a virgin .emacs.d and building enough to install a few packages but I haven't been able to trigger the org-plus-contrib installation yet. Commented Jan 13, 2019 at 11:59
1

Another reason a package might be listed as a dependency is because it is in ~/.emacs.d/elpa, but not in package-selected-packages. One possible way to reach that state is install a newer version of a package, notice it, and delete one of them.

1

I am using straight.el. Running the command:

grep -rin ";; Package-Requires:" ~/.emacs.d/straight/repos/ 

Helped me find the dependencies of each package, so I could then filter the package that I was looking for.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.