Le 13/07/2022 à 16:31, Graham King a écrit :
I'm looking for a way to run a recent lilypond version on Ubuntu 18.04.
Currently, I have a docker image[1] of lilypond 2.23.10 that I can
invoke successfully from the command line, using:
docker run -v $(pwd):/app -w /app jeandeaual/lilypond:devel lilypond
foo.ly
The challenge is getting a locally-installed Frescobaldi 3.2 to run
this image.
In Frescobaldi's Preferences, I've set the lilypond command to:
docker run -v $(pwd):/app -w /app jeandeaual/lilypond:devel lilypond
But when I try to run lilypond from within Frescobaldi, I get the
following error:
Traceback (most recent call last):
File
"/home/xxxx/git/frescobaldi/frescobaldi/frescobaldi_app/engrave/__init__.py",
line 145, in engravePreview
self.engrave('preview')
File
"/home/xxxx/git/frescobaldi/frescobaldi/frescobaldi_app/engrave/__init__.py",
line 200, in engrave
self.runJob(job_class(doc, args), doc)
File
"/home/xxxx/git/frescobaldi/frescobaldi/frescobaldi_app/engrave/__init__.py",
line 252, in runJob
job.manager.manager(document).start_job(j)
File
"/home/xxxx/git/frescobaldi/frescobaldi/frescobaldi_app/job/manager.py",
line 61, in start_job
job.start()
File
"/home/xxxx/git/frescobaldi/frescobaldi/frescobaldi_app/job/__init__.py",
line 225, in start
self._update_process_environment()
File
"/home/xxxx/git/frescobaldi/frescobaldi/frescobaldi_app/job/__init__.py",
line 304, in _update_process_environment
se.remove(k) if v is None else se.insert(k, v)
TypeError: arguments did not match any overloaded call:
insert(self, str, str): argument 2 has unexpected type 'bool'
insert(self, QProcessEnvironment): argument 1 has unexpected type 'str'
So, two questions:
1. How should I set up Frescobaldi to run the docker image?
I don't know why Frescobaldi crashes like this. Maybe try to upgrade it?
On the other hand, I don't think what you're doing is expected to work
in this way (although it shouldn't result in a crash but graceful error
handling, as it does for me -- the LilyPond version I'm inserting just
gets a "no entry" symbol). "docker run ..." is a shell command. What you
need to give to Frescobaldi is just an executable. When it calls
LilyPond, there is no shell involved. It will likely try to find the
executable "docker run ...", as if you had done in your shell:
"docker run ..." file.ly
(with quotes to make all that the name of the command being run).
If you really want Docker (but see below), you can put this in a script
somewhere, called for example lilypond-docker.sh:
#!/bin/bash
docker run ... "$@"
Then you can use the full path to lilypond-docker.sh as the LilyPond
executable in Frescobaldi.
2. If I'm barking up the wrong tree entirely, what is the recommended
way for Frescobaldi to run lilypond at a more recent version than the
distro supplies?
There is no need for Docker at all! All versions of LilyPond have always
supported being installed in parallel without conflicting. Furthermore,
recent versions (2.23.6 and later) are static binaries. They don't even
need installation, they can just be unpacked and run.
So, just download 2.23.10 from https://lilypond.org/development.html,
unpack the archive, and in Frescobaldi, enter the full path
/.../lilypond-2.23.10/bin/lilypond. And your LilyPond will be usable
right away.
Best,
Jean