cx_Freeze und statische Dateien?

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 15. August 2006, 12:05

Hoi,

weiß nicht recht, ob der Titel das Problem trifft, aber ...

Ich habe jedenfalls versucht eine Applikation von mir mit cx_Freeze zu packen und das ergab dies hier, wenn ich es wieder starte - auf dem selben Rechner wohlgemerkt:

Traceback (most recent call last):
File "/home/cm/bin/initscripts/Console.py", line 27, in ?
exec code in m.__dict__
File "SPlot.py", line 17, in ?
File "/usr/lib64/python2.4/site-packages/matplotlib/__init__.py", line 720, in ?
defaultParams = {
File "/usr/lib64/python2.4/site-packages/matplotlib/__init__.py", line 273, in wrapper
ret = func(*args, **kwargs)
File "/usr/lib64/python2.4/site-packages/matplotlib/__init__.py", line 360, in _get_data_path
raise RuntimeError('Could not find the matplotlib data files')
RuntimeError: Could not find the matplotlib data files

M.a.W. einige Dateien von matplotlib wurden nicht gelinkt. Ok. Jetzt habe ich beim matplotlib-Forum nachgefragt, ob jemand Rat weis und alles was ich bekam war ein Link zu py2exe - was mir leider überhaupt nicht weiterhilft. Aber da es hier relativ viele Leute gibt, die scheinbar cx_Freeze benutzen meine Frage: Was muß ich wo hineinschreiben, damit cx_Freeze alles in ein Paket schreibt?

Vielen Dank,
Christian
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 15. August 2006, 13:00

CM hat geschrieben: raise RuntimeError('Could not find the matplotlib data files')
RuntimeError: Could not find the matplotlib data files
Hi Christian!

Ich habe mir mal den Quellcode von ``C:\Python24\Lib\site-packages\matplotlib\__init__.py`` angesehen.

Code: Alles auswählen

    # CODE ADDED TO SUPPORT PY2EXE - you will need to copy
    # C:\Python23\share\matplotlib into your dist dir.  See
    # http://starship.python.net/crew/theller/moin.cgi/MatPlotLib
    # for more info

    if sys.platform=='win32' and sys.frozen: 
        path = os.path.join(os.path.split(sys.path[0])[0], 'matplotlibdata') 
        if os.path.isdir(path):  return path 
        else:
            # Try again assuming sys.path[0] is a dir not a exe 
            path = os.path.join(sys.path[0], 'matplotlibdata') 
            if os.path.isdir(path): return path

    raise RuntimeError('Could not find the matplotlib data files')
So wie es also aussieht musst du, wie im Kommentar beschrieben, zusätzlich den "matplotlib"-Ordner in den "dist"-Ordner kopieren.

``sys.frozen`` wird von cx_freeze ebenfalls ausgewertet, so dass dieser Code auch bei cx_freeze funktionieren sollte.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 15. August 2006, 13:28

Danke gerold, aber ich kapiers immer noch nicht.
Ein einfaches cp -r /usr/lib64/python2.4/site-packages/matplotlib/* . in den Zielordner jedenfalls ist doch zu naiv gedacht.

Ich habe auch schon geschaut, ob ich irgendwo eine Parameterdatei verändern und so Freeze erzählen kann, wonach es zu schauen hat. Bin aber nicht fündig geworden. Wie sieht denn das Analogon zu setup.py von py2exe aus - falls es eines gibt?

Gruß,
Christian
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 15. August 2006, 13:49

CM hat geschrieben:Ein einfaches cp -r /usr/lib64/python2.4/site-packages/matplotlib/* . in den Zielordner jedenfalls ist doch zu naiv gedacht.
Hi Christian!

Ja, zu naiv. Erstens verwendest du den falschen Pfad und zweitens verwendest du Linux -- und das wird ja im vorher aufgezeigten Codeausschnitt komplett ausgeschlossen.

"share\matplotlib" ist der richtige Pfad.

Mehr kann ich jetzt nicht dazu beitragen, da ich mich jetzt mit ein paar Freunden in den Garten setze. :P

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten