La méthode to_pdf ne crée pas de PDF

Bonjour,

Mon problème est simple : lorsque j'essaie de créer un PDF à partir d'un Bar que j'ai créé (en Python), le programme s'exécute, mais aucun PDF n'est créé dans le projet.
Est-ce que le PDF se crée à un autre endroit? Sinon est-ce que ça a rapport avec LilyPond lui-même?
J'ai joint une image de mon projet.

Merci de votre aide!

Bonjour Fred,

Si vous regardez la doc de mingus.extra.lilypond, ils spécifient:

LilyPond in the $PATH is needed.

Ce qui est confirmé avec les sources de lilypond.to_pdf:

def save_string_and_execute_LilyPond(ly_string, filename, command):
"""A helper function for to_png and to_pdf. Should not be used directly."""
ly_string = '\version "2.10.33"\n' + ly_string
if filename[-4] in ['.pdf' or '.png']:
filename = filename[:-4]
try:
f = open(filename + '.ly', 'w')
f.write(ly_string)
f.close()
except:
return False
command = 'lilypond %s -o "%s" "%s.ly"' % (command, filename, filename)
print 'Executing: %s' % command
p = subprocess.Popen(command, shell=True).wait()
os.remove(filename + '.ly')
return True

Cette fonction fait simplement un appel système à lilypond, il faut donc que lilypond soit installé correctement et que le $path de là où vous lancez main.py puisse le trouver directement.

Au plaisir,

Ben

J'ai ajouté, justement, LilyPond dans mon Path, mais je ne sais pas où le programme est sensé créer le PDF. Est-ce dans le dossier d'où j'exécute le code?

Si j'en crois votre photo d'écran, auriez-vous simplement pris lilypond.exe et l'auriez-vous placé dans le même dossier que votre fichier main.py? Car ce n'est pas cela ajouter dans le $path, là vous rendez même lilypond inopérant.

La librairie mingus.extra.lilypond n'est plus mise à jour depuis plusieurs années, et elle n'est rien d'autre qu'un petit raccourci fait pour gagner un peu de temps, mais qui n'est pas du tout indispensable. A votre place, je commencerai déjà par réinstaller correctement lilypond, je créerai le pdf depuis un éditeur lilypond, il apparaîtra par défaut au même niveau que le fichier source http://source.ly/ en .ly, et je mettrai ensuite le pdf dans le projet python, si vous faites peu de changements dessus, c'est beaucoup plus simple que de passer par mingus.

En supprimant lilypond.exe de l'emplacement, ça fonctionne! J'avais déjà ajouté LilyPond à mon $Path, donc ça doit être pour ça que ça ne fonctionnait pas.

Alors oui, effectivement:

Il a d'abord pris ce lilypond.exe, mais sans trouver ses librairies. Dès lors que vous l'avez supprimé, il est allé chercher celui de votre $path où là, il a pu trouver ses librairies et réussir la compilation.

Autre question plus ou moins reliée (mais que je vais mettre ici puisque ça prend du temps faire approuver un post) :
Comment je change la clef depuis Python? Je n'arrive pas à placer des notes basses en clef de Fa

Non, c'est seulement le premier post qui est modéré (pour prévenir le spam).

1 « J'aime »

Dans la fonction save_string_and_execute_LilyPond(ly_string, filename, command), vous devez passer le code lilypond dans la variable ly_string.

Donc tout le code que vous mettriez dans l'éditeur lilypond doit être passé dans ly_string, à l'exception du numéro de version qui est ajouté automatiquement par la fonction, et en faisant attention aux problèmes d'échappements.