Autor Thema: unverständliche Fehlermeldung  (Gelesen 22713 mal)

juppes

  • Gast
Re:unverständliche Fehlermeldung
« Antwort #45 am: Samstag, 17. Juli 2010, 22:21 »
lieber Robert,

herzlichen Glückwunsch! Volltreffer! Tooor!

Dabei ist mir auch wieder eingefallen, daß ich seinerzeit das convert-ly von Lilypond 2.12.2 in ähnlicher Weise geändert habe, weil die von Haus aus mitgelieferte Fassung nicht funktionierte. Man vergißt das dann irgendwann wieder, weil das Problem abgehakt ist und weil ab und zu eine längere Zeit ohne Notenschreiben ins Land gegangen ist.

convert-ly brauche ich zwar im Moment nicht oft, aber ab und an lade ich auch mal bei Mutopia etwas herunter, und da sind oft .ly-Dateien, die mit Uralt-Versionen von Lilypond erstellt wurden.

#!/usr/bin/env python#! scheint also zum Beispiel unter Linux der Python-Ort zu sein, nicht wahr? Dann kann es ja unter Mac OS X nicht gehen. Das "Geheimnis" ist also, zu wissen, wo man bestimmte Pfade eintragen muß - ein ganz simples Prinzip.

ganz herzlichen Dank und einen geruhsamen Abend

RobUr

  • Gast
Re:unverständliche Fehlermeldung
« Antwort #46 am: Samstag, 17. Juli 2010, 23:03 »
Mit #!/usr/bin/env python dürfte convert-ly im Terminal funktionieren, aber TeXShop kommt damit irgendwie nicht klar. Die Zeile teilt dem Python-Script lediglich mit, wo es die benötigte Python-Anwendung findet. #!/usr/bin/env python ist also dasselbe wie die bloße Eingabe von python im Terminalfenster. Voraussetzung ist natürlich, dass der Pfad zu Python in der Environment-Variable path eingetragen ist. Es geht ja nur darum, nicht immer die kompletten Pfadangaben eintippen zu müssen. Die convert-ly.engine würde auch folgendermaßen laufen (ohne #!/usr/bin/env python o.ä. im Script):
#!/bin/tcsh
exec /Library/Frameworks/Python.framework/Versions/2.6/bin/python /Applications/Lilypond.app/Contents/Resources/bin/convert-ly -e "$1"
Wie du unschwer erkennen kannst, werden hier mit absoluten Pfadangaben zuerst Python gestartet und dann convert-ly mit der aktuell in TeXShop geöffneten Datei aufgerufen. Die erste Zeile in convert-ly.engine (#!/bin/tcsh) teilt der Engine mit, welche Shell benutzt werden soll (in diesem Fall die TENEX C Shell), um die nachfolgenden Befehle interpretieren zu können. Es würde auch mit der Standard-Shell (bash) funktionieren, dann müsste die convert-ly.engine folgenden Inhalt haben:
#!/bin/bash
/Library/Frameworks/Python.framework/Versions/2.6/bin/python /Applications/Lilypond.app/Contents/Resources/bin/convert-ly -e "$1"

Beste Grüße, Robert

juppes

  • Gast
Re:unverständliche Fehlermeldung
« Antwort #47 am: Sonntag, 18. Juli 2010, 12:29 »
Zitat
Voraussetzung ist natürlich, dass der Pfad zu Python in der Environment-Variable path eingetragen ist.

Und wo trage ich das ein? In ~/.profile oder ~/.bash_profile? Wäre schon toll, wenn auch die Shell und auch alles andere immer gleich Bescheid wüßte, wo Python ist, so daß es dann egal wäre, ob ich im Terminal arbeite oder eben in TeXShop oder in Lilypond direkt.

RobUr

  • Gast
Re:unverständliche Fehlermeldung
« Antwort #48 am: Montag, 19. Juli 2010, 06:14 »
Hallo juppes!

Zitat
Und wo trage ich das ein? In ~/.profile oder ~/.bash_profile?
In ~/.profile stehen die spezifischen Umgebungsvariablen für den jeweils angemeldeten Nutzer (das, was man nach Eingabe von env angezeigt bekommt; env = environment = Umgebung). Pfade also hier eintragen.
In ~/.bash_profile kann man das Verhalten der Bash (Bourne-again shell) beeinflussen, z.B. Reaktion auf bestimmte Nutzereingaben, Codeeinfärbung/Syntaxhighlighting usw. Die Bash ist die Standard-Shell in Mac OS X.
Es gibt auch andere Shells, die anderslautende Befehle und anders aufgebaute Syntax erwarten, z.B. die TENEX C Shell (tcsh), für welche die lilypond-Engines geschrieben wurden. Zu Beginn eines Scripts muss daher angegeben werden, welcher Interpreter angesprochen werden soll. Diese erste Zeile wird mit #! begonnen, gefolgt vom Systempfad, z.B. #!/bin/bash (auch DOS unter Windows-Systemen ist eine Shell, aber dort gibt es ohne weiteres Zutun nur diese eine). Ein sichtbarer Unterschied zwischen bash und tcsh ist z.B. die explizite Anweisung in der tcsh, etwas auszuführen (exec), was die bash nicht benötigt.

Zitat
Wäre schon toll, wenn auch die Shell und auch alles andere immer gleich Bescheid wüßte, wo Python ist, so daß es dann egal wäre, ob ich im Terminal arbeite oder eben in TeXShop oder in Lilypond direkt.
An diesem Punkt teilen sich leider die Wege.

(1) Terminal (oder auch Konsole, Eingabeaufforderung, Prompt etc.) und Shell
Laut deiner aktuellen Ausgabe durch env weiß dein System bereits, wo überall sich Python befindet – falsch: dein System weiß, wo es danach suchen soll, nämlich in den Pfaden, die in der Variablen PATH eingetragen sind. Die Verzeichnisse, die dort angegeben sind, werden von vorn nach hinten solange durchsucht, bis die gewünschte Anwendung gefunden wurde; die Suche wird sobald abgebrochen und die Anwendung ausgeführt. In deiner PATH-Variablen steht an erster Stelle der Pfad zu Python 2.6 (/Library/Frameworks/Python.framework/Versions/2.6/bin), gleich darauf der Pfad zu Python 3.1 (/Library/Frameworks/Python.framework/Versions/3.1/bin). Gibt sich nun das aufgerufene Python-Script mit der ersten Version zufrieden, besteht keine Notwendigkeit zum Weitersuchen, und das Script wird ausgeführt. Verlangt ein Script eine höhere Version, wird PATH weiter durchsucht, ob eine höhere Version gefunden werden kann. Bei Erfolg wird das Script ausgeführt. Andererseits bricht das System mit einer Fehlermeldung ab. Dein unverändertes convert-ly (mit der ersten Zeile #!/usr/bin/env python) muss im Terminal also funktionieren! Das einzige Problem dabei kann jetzt nur sein, dass convert-ly selbst nicht gefunden wird, weil die Pfadangabe zum Lilypond-Container fehlt. Aber das ist einfach und hatten wir bereits: convert-ly liegt genau wie lilypond und lilypond-book in /Applications/LilyPond.app/Contents/Resources/bin, und dieser Pfad muss PATH hinzugefügt werden (wie bei GS_LIB). Also wieder Terminal starten, und los geht’s:cd
nano .profile
und an’s Ende der Datei folgenden Zweizeiler einfügen:# Pfad zu LilyPond 2.12.3
export PATH="$PATH:/Applications/LilyPond.app/Contents/Resources/bin"
Nach Abspeichern und Aus-/Einloggen sind convert-ly und auch lilypond und lilypond-book direkt im Terminal ohne Umwege aufrufbar. Du kannst es ausprobieren, indem du in ein beliebiges Verzeichnis mit .ly-Dateien wechselst und dort eine .ly-Datei mit convert-ly aufrufst. Ein Beispiel: kopiere deine GraafDuoEconomique.ly (aus deinem anderen Thread) auf den Schreibtisch und benenne sie meinetwegen in test.ly um. Im Terminal wechselst du nun dorthin und lässt sie mit convert-ly durchlaufen:cd
cd Desktop/
convert-ly test.ly
Bei Erfolg sollte im mindesten folgendes in’s Terminalfenster geschrieben werden:
convert-ly (GNU LilyPond) 2.12.3
Processing `test.ly'...
Applying conversion:

(2) TeXShop und die TeXShop-Engines
Es ist mir wirklich schleierhaft, warum TeXShop den Systemunterbau ignoriert. Ich habe jetzt wirklich vieles ausprobiert und versucht zu verstehen, und es ziert sich nach wie vor wie die Zicke am Strick … Aber gut, es hat sein Für und Wider – bringen wir der TeXShop-Engine convert-ly.engine die Pfade eben auch bei! Wie einfach das ist, hatten wir vor gefühlten 25.000 Zeilen in diesem Thread schon einmal, aber es genügt tatsächlich der Zweizeiler aus meiner vorangehenden Antwort (unter Verwendung der tcsh):
#!/bin/tcsh
exec /Library/Frameworks/Python.framework/Versions/2.6/bin/python /Applications/Lilypond.app/Contents/Resources/bin/convert-ly -e "$1"
Das Problem ist halt, dass convert-ly eben nur ein Script ist, das von einem Programm abgearbeitet werden muss. In der ersten Script-Zeile in convert-ly wird System-Python zwar aufgerufen, aber das wird irgendwie nicht an TeXShop zurückgegeben. Daran wird’s unterm Strich scheitern.
Im Prinzip muss man nur im Hinterkopf behalten, dass TeXShop möglicherweise bewusst unabhängig manche Umgebungsvariablen ignoriert – und genau das ist unser Vorteil beim Stricken von neuen TeXShop-Engines! Ich hatte ja früher schon erwähnt, dass ich verschiedene Engines für die aktuell stabile Version, die jeweils aktuelle Entwicklerversion und auch für lilypond-book (bzw. lilypond-latex) und convert-ly habe. Wenn schon TeXShop das nicht anders kapiert, machen wir uns das doch zunutze ;)

Fazit
  • convert-ly kann so bleiben, wie es ist, solang die Pfade zu Python und Lilypond in der Environment-Variable PATH zur Verfügung gestellt werden.
  • TeXShop-Engines müssen sicherheitshalber die (absoluten) Pfadangaben noch einmal enthalten, damit es reibungslos funktioniert.
  • Kein Programm sucht von allein die ganze Festplatte ab. (Das könnte mittlerweile auch ganz schön lange dauern …)
  • TeXShop ist nicht das Terminal!
  • Die verantwortliche Datei für den angemeldeten Nutzer ist ~/.profile

Das „direkt in Lilypond“ hab ich mal wieder bewusst ausgelassen … Es macht ja auch keinen Spaß, in einem langweiligen monochrom-Texteditor zu arbeiten ;) Bei deiner Systemkonfiguration und der für TeXShop kann ich dir helfen, aber den buggy Lilypond-Editor kann ich beim besten Willen nicht patchen. Natürlich ist es doof, wenn eine App nicht so spurt, wie wir das möchten, aber das kennen wir ja schon von woanders her. Für diese Fälle gibt’s eben solche Foren wie dieses hier! (Stell dir nur vor, du hättest für Lily bezahlt und hingest daraufhin Woche für Woche in einer teuren Supportline.)

Falls dir die Idee in diesem Thread zusagt, schreib doch einfach was dazu.

Beste Grüße, Robert

juppes

  • Gast
Re:unverständliche Fehlermeldung
« Antwort #49 am: Montag, 19. Juli 2010, 14:28 »
hallo Robert,

danke, das ist klar und deutlich! Ich werde mir das mal in Ruhe zu Gemüte führen und ggf. das eine oder andere in die diversen Dateien eintragen.

herzlichen Gruß