Tim,


Yes, it is a bit of dependency hell.



Quoting myself from Re: [O] How to safely update from ver. 8.2.10 to 
8.3.x<https://lists.defectivebydesign.org/archive/html/emacs-orgmode/2016-08/msg00138.html>
 :





Here's what I do, at the shell:



          emacs -Q -batch -eval "(progn (require 'package) (add-to-list

'package-archives '(\"org\" . 
\"http://orgmode.org/elpa/\";<http://orgmode.org/elpa/%22>;))

(package-initialize) (package-refresh-contents) (package-install

'org-plus-contrib))"



This assures that org is not already loaded when org is compiled, which I've

learned is the source of creating a mess.



Note: I use org-plus-contrib from melpa instead of org.  If you want just org,

you could simply:



          emacs -Q -batch -eval "(progn (require 'package) (package-initialize)

(package-refresh-contents) (package-install 'org-plus-contrib))"



HTH,



Malcolm



From: Emacs-orgmode <emacs-orgmode-bounces+mec=stowers....@gnu.org> On Behalf 
Of Tim Cross
Sent: Tuesday, November 26, 2019 3:41 PM
To: Nick Dokos <ndo...@gmail.com>
Cc: Org-mode <emacs-orgmode@gnu.org>; Emacs developers <emacs-de...@gnu.org>
Subject: Re: org 9.2.6 and org 9.1.9

CAUTION: This email was received from an External Source

There is a very important rule which must be followed wrt org-mode 
installation. It is critical that no version of org is already loaded before 
installing a new version. This can be quite tricky as many of us have org 
setups which automatically load some org functionality without explicitly 
opening an org file or agenda view (for example, you might be using an org 
add-on for email). Situation is worse if we are loading org as part of our 
init.el.

I'm also not sure that tweaking the load-path order is sufficient if your 
installing org via M-x package-install as there is a 'chicken and egg' problem 
with the initial install. If your init.el file is loading org functionality and 
you only have the built-in org version installed, that version will be loaded 
before you run package-install. Probably works if you install via your init.el 
though.

I've found the safest thing to do is only use autoload or use-package with 
deferred loading for org and whenever updating org (I use the org-plus-contrib 
package from the org elpa repo) only update immediately after a fresh restart 
of emacs and before doing anything else.  Failing to do this often results in a 
broken build as you get a set of new org elc files which contains definitions 
from two different org versions. When the versions are only different in minor 
version numbers, this mixed build may not even be noticeable, but when major 
version differences exist, you get the symptom of broken functionality, missing 
definitions or unbound symbols.

The situation is made worse by package maintainers specifying the latest org 
version rather than the version built into Emacs when the bundled version would 
be sufficient.

It took me a while to structure my init.el file such that no org functionality 
was loaded until I used something which depends on it. However, once I did, 
provided I only update org in a fresh new session, all works flawlessly. I 
found use-package package really helped with this.



On Wed, 27 Nov 2019 at 06:22, Nick Dokos 
<ndo...@gmail.com<mailto:ndo...@gmail.com>> wrote:
Jean-Christophe Helary 
<jean.christophe.hel...@traduction-libre.org<mailto:jean.christophe.hel...@traduction-libre.org>>
 writes:

> org 9.1.9 is a built-in
>
> but org 9.2.6 comes as a dependency to some packages and having both 
> installed creates conflicts.
>

What conflicts are you seeing? I have the built-in 9.1.9 org that
comes with emacs but I run (close to) latest master and I see no
problems: the only thing I do is to set my load-path to point to the
right place (and make sure that that setting precedes the
/usr/local/share/emacs/27.0.50/lisp/org setting that emacs adds):

    (add-to-list 'load-path (expand-file-name "~/elisp/org-mode/lisp"))

Although that has been enough for me, it's probably safer to delete
from load-path all other org entries, thereby making the built-in
version invisible to emacs - in my case, I just have the one:

   (delete "/usr/local/share/emacs/27.0.50/lisp/org" load-path)

That way, if you happen to do something like `(require 'old-org-req)'
with a requirement that is not satisfied by current org, but is
satisfied by the built-in org, you'd get an error, rather than getting
a mixed installation.

> Why does that happen ?
>
> Can't 9.2.6 override 9.1.9 ? It's not the first time I have issues
> with that situation and that's extremely confusing. What is the best
> way to solve that ?
>

I think the above should be enough (and IME it is), but maybe someone can
think of other things that might trip one up.

--
Nick

"There are only two hard problems in computer science: cache
invalidation, naming things, and off-by-one errors." -Martin Fowler



--
regards,

Tim

--
Tim Cross

Reply via email to