Suche Hilfe beim compilieren eines OpenSource Programmes

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Rachima
User
Beiträge: 5
Registriert: Donnerstag 3. Mai 2007, 23:58

Hallo zusammen,

bin neu hier und habe von Python (noch) keine Ahnung. Kenne ein bischen PHP und VB6. Es gibt da ein in Python geschriebenes OPenSource Programm, http://avisynth.org/qwerpoi/, das ich gerne kompilieren möchte. Es hat dazu auch eine kurze Anleitung und ein Script, welches nach Anpassung von 2-3 Pfaden das automatisch erledigen soll. Leider ist's dann aber doch nicht so einfach. Vielleicht hängt es mit Versions-Inkompatibilitäten zusammen oder vieleicht auch was anderes.
Das Programm wurde vom Author selber mit Python 2.4.x kompiliert.
Ich habe ActivePython 2.5 von ActiveState installiert, das hat schon die Windows Libraries alle drin. Ich habe die Unicode- anstelle der Ansi-Variante gewählt, (warum weiß ich eigentlich nicht mehr so genau) Zusätzlich noch wxPython oder wie das Framework für Fenster und Controls heißt, py2exe und den upx-packer.
Beim start des build-scripts gab es dann direkt vier Fehlermeldungen:
hier in Zeile 5:

Code: Alles auswählen

def main(pythonexe='E:\\_PROGS\\Python25\\python.exe', arg1=r'E:\\_PROGS\\Python25\\Tools\\i18n\\pygettext.py'):
    #~ pythonexe =
    #~ arg1 =
    arg2 = 'AvsP.py wxp.py pyavi.py'
    os.system('%s "%s" %s' % (pythonexe, arg1, arg2))
ergab folgende Fehlermeldungen:
*** AvsP.py:35: Seen unexpected token "s"
*** AvsP.py:42: Seen unexpected token "s"
*** AvsP.py:67: Seen unexpected token "s"
*** wxp.py:63: Seen unexpected token "s"
hier sind ein paar Zeilen aus AvsP.py

Code: Alles auswählen

32	try:
33	    import translation
34	    messages = translation.messages
35	    def _(s):
36	        s2 = messages.get(s, s)
37	        if s2:
38	            return s2
39	        else:
40	            return s
41	except ImportError:
42	    def _(s): return s
Kann jemand etwas damit anfangen und mir einen Tipp zum weitermachen geben?


Gruß,
Rachima

PS: zum Glück habe ich mal irgendwann die Komodo-IDE mit Debugger, (Personal Edition) für PHP angeschafft, und die unterstützt auch Python. Deshalb kann ich zumindest die Stellen ausfindig machen an denen es hapert, auch wenn ich fast nichts verstehe. ;-)
mod_che
User
Beiträge: 46
Registriert: Freitag 13. April 2007, 16:58

die def-Anweisung stellt ein Modul namens "_" bereit und übergibt ihm den Paramater (s)??? Sieht sehr komisch aus finde ich.
Python rockt.
BlackJack

Nein die ``def``-Anweisung definiert eine Funktion mit dem Namen `_`. Das ist eine Namenskonvention für die Funktion, die eine Zeichenkette mit Hilfe von `gettext` übersetzt.

`pygettext` ist dazu da um die Texte aus Aufrufen von dieser Funktion zu extrahieren, damit man sie übersetzen und zu einer Binärdatei für `gettext` kompilieren kann. Dazu muss zwischen den Klammern natürlich eine literale Zeichenkette stehen und kein Name und genau darüber scheint sich `pygettext.py` zu beschweren.
Rachima
User
Beiträge: 5
Registriert: Donnerstag 3. Mai 2007, 23:58

Hi,
mod_che hat geschrieben:die def-Anweisung stellt ein Modul namens "_" bereit und übergibt ihm den Paramater (s)??? Sieht sehr komisch aus finde ich.
Ok, sieht's halt komisch aus. Mehr interessiert mich aber, ob das syntaktisch richtig oder falsch ist. Vermutlich ist es richtig, denn wenn ich das Programm-Script aufrufe (parse/ausführe), läuft alles fehlerfrei.

Gruß,
Rachima
Rachima
User
Beiträge: 5
Registriert: Donnerstag 3. Mai 2007, 23:58

Hi BlackJack,
BlackJack hat geschrieben:[...]
`pygettext` ist dazu da um die Texte aus Aufrufen von dieser Funktion zu extrahieren, damit man sie übersetzen und zu einer Binärdatei für `gettext` kompilieren kann. Dazu muss zwischen den Klammern natürlich eine literale Zeichenkette stehen und kein Name und genau darüber scheint sich `pygettext.py` zu beschweren.
Dazu kann ich nur sagen das das Programm, (die Binary aus der Distribution) wenn es beim starten eine neue Sprachdatei findet, diese fehlerfrei in eine .pyo wandelt.

Mehr Tipps?

Gruß,
Rachima
BlackJack

Sprachdatei? '*.pyo' ist ein kompiliertes Python-Modul, das wird vom Python-Compiler erstellt und hat mit `pygettext.py` nichts zu tun.

Die Aufrufe der `_`-Funktion dürfen nur literale Zeichenketten enthalten. Wobei anscheinend nicht zwischen Aufruf und Definition unterschieden wird, sondern einfach nur nach dem Muster '_(irgendwas)' gesucht wird. Folgender Quelltext führt zu der gleichen Fehlermeldung:

Code: Alles auswählen

    print _('Just a test')
    print _(data)

Code: Alles auswählen

$ pygettext test.py
*** test.py:1093: Seen unexpected token "data"
Ohne die zweite Zeile wird eine korrekte `message.pot`-Datei erzeugt.
Rachima
User
Beiträge: 5
Registriert: Donnerstag 3. Mai 2007, 23:58

Hallo BlackJack,
BlackJack hat geschrieben:Sprachdatei? '*.pyo' ist ein kompiliertes Python-Modul, das wird vom Python-Compiler erstellt und hat mit `pygettext.py` nichts zu tun.

Die Aufrufe der `_`-Funktion dürfen nur literale Zeichenketten enthalten. Wobei anscheinend nicht zwischen Aufruf und Definition unterschieden wird, sondern einfach nur nach dem Muster '_(irgendwas)' gesucht wird.
Hhm, ja das ist wohl richtig so.

Nichts desto trotz erstellt das Programm, wenn es beim starten eine Datei "translation.py" findet daraus automatisch (und fehlerfrei!) eine "translation.pyo" datei. Ich bin mir nicht sicher, aber ich glaube dazu wird eine "__translation.py" (die wohl die englischen strings enthält) mit der neuen "translation.py" verglichen. Ich dachte das wird mit _() und pygettext gemacht?


Gruß,
Rachima
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Rachima hat geschrieben:Ich dachte das wird mit _() und pygettext gemacht?
Nein. gettext arbeitet ausschließlich mit PO (POT) und MO-Dateien.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Rachima
User
Beiträge: 5
Registriert: Donnerstag 3. Mai 2007, 23:58

Hi Leonidas,
Leonidas hat geschrieben:
Rachima hat geschrieben:Ich dachte das wird mit _() und pygettext gemacht?
Nein. gettext arbeitet ausschließlich mit PO (POT) und MO-Dateien.
Ok, hab da wohl einiges durcheinander gebracht.

Erstes Fazit: das ganze Thema ist zu komplex als das es sich ohne (schrittweise) Vertiefung in die Thematik umsetzen ließe.

Deshalb habe ich mir eine kleinere Aufgabe gestellt: ich möchte "nur" eine COM-Server-DLL in Python kompilieren. Zu den Hausaufgaben gehörten bisher die entsprechenden Kapitel in der Python-Doku, ein paar Beispiele hier im Forum und dem Rest des Netzes zu lesen und erste Testscripte zu erstellen und testen. Momentan bin ich soweit das die Scripte funktionieren, das kompilieren mittels py2exe aber noch nicht. Ich bastele noch etwas weiter, und wenn's nicht klappt frage ich hier noch mal nach.

Was mich aber in jedem Fall interessiert, gibt es eine Art SchnellDoku über Python für 'Quereinsteiger', wo z.B. die häufigsten Fallstricke aufgezeigt werden die Leute mit PHP-Kentnissen zuerst machen, oder ähnliches?


Gruß,
Rachima


PS: Das Forum hier ist auch im ReadOnlyMode sehr hilfreich!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Rachima hat geschrieben:Was mich aber in jedem Fall interessiert, gibt es eine Art SchnellDoku über Python für 'Quereinsteiger', wo z.B. die häufigsten Fallstricke aufgezeigt werden die Leute mit PHP-Kentnissen zuerst machen, oder ähnliches?
Wäre mir nicht bekannt. Aber das Tutorial zu Überfliegen schadet auch als Quereinsteiger nicht. Viele Dinge wirst du kennen, einige andere sind neu. Alternativ kannst du dir auch Dive Into Python ansehen, was zwar nicht mehr so neu ist, aber für Umsteiger wohl gut sein sollte.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten