I am trying to understand the subtle nuances of Emacs' packaging system(s). I do not find that anyone has really clarified or explained the difference between two, what I assume to be, key components of Emacs package system: require
and package-install
.
I commonly see code like the following in many init.el
files (illustrative example):
(require 'package) ; Use Emacs package system
(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/") t) ; Add MELPA package repository as a place to go lookup for packages
(package-initialize) ; Turns Emacs package system on
; ... refresh code omitted for brevity
(unless (package-installed-p 'helm) ; Only installed "helm" if we don't see it as already installed
(package-install 'helm)
)
(require 'helm) ; Get helm to actually use
; ...
The thought process for understanding what is going on:
require
seems to be called forpackage
but the "package" forpackage
does not need to be "installed". Is this internal somehow?- Is
package
needed foruse-package
to work but notrequire
, correct? - For
helm
(in this example) we must do/usepackage-install
(with some checks) to first "install"helm
and thenrequire
to actually use it. Is this correct? - If we did
(use-package helm ... )
then we would not need eitherrequire
orpackage-install 'helm
, right?
To extrapolate:
If one wanted to use any particular package, they first need to make sure they have an equivalent package-install
call / statement prior to invoking require
(or just utilize a use-package
which will "merge" both steps) on that particular package, correct?
I just want to be sure I am properly setting up my usage of packages and so forth. Emacs is very confusing when it comes to packages, installing, requiring, etc. ... at least that I find.
Q/A Housekeeping Notes:
According to common advice, there are important differences in the Emacs major versions, so I would like an explanation for each (Emacs version 25, 26, and 27, respectively) for others who may come across the same question but on an older version (if it matters).
I am currently on Emacs 27.2 on macOS Catalina (just to be clear).
In an attempt to preempt "duplicate of ..." or "searching will find ...": In my searching, I found require vs. package-initialize? but it does not look like anyone really answered the question to satisfaction (or clearly).
require
andpackage-install
. It covered another command. I am not sure what is exactly overwhelming about my question here. "What is the difference betweenrequire
andpackage-install
?". I outlined my thoughts as I was trying to understand it.