Mehrere Scripte kompilieren

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
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Hallo!
Ich hab jetzt echt lang gesucht, aber nix gefunden.
Wie kann ich mehrere Scripte so kompilieren, dass ich die PythonLib nur einmal brauche?
Ich habs mit cxfreeze probiert, auch mit der Anleitung von Gerold, aber es kam ein Fehler:
[quote=""cx_Freeze: Python error in main script"-Fehlermeldung "]Traceback(most...

...import _tkinter
ImportError: DLL load failed: Das angegebene Modul wurde nicht gefunden.[/quote]
Mit Py2exe weiß ich nicht, wie ich die Scriptnamen trennen soll.

Ich hoffe, ihr könnt mir helfen.

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

schlangenbeschwörer hat geschrieben:Traceback(most...

...import _tkinter
ImportError: DLL load failed: Das angegebene Modul wurde nicht gefunden.
Hallo jj!

Lass es dir bitte nicht aus der Nase ziehen. ;-) Vollständiger Traceback und was importierst du in deinen Programmen wie? Dann kann ich auch probieren, aber ohne diese Informationen...

Edit:
Ups! :oops:
Jetzt habe ich soeben zum ersten Mal versucht, ein Tkinter-Programm mit cx_freeze zusammenzustellen. Fehlanzeige. Ich kriege es nicht hin. Also werde ich dir kaum helfen können -- auch wenn du mir oben genannte Fragen beantwortest. :?

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Hi Gerold!
Hier die Module, die ich in den 4 Programmen und den benötigten eigenen Modulen ganz oder in Teilen importiere:

sys
os
pickle
win32api
time
getopt

math
random

Tkinter
Tix
tkColorChooser
tkMessageBox
tkFileDialog

wenn möglich:
winsound
threading
1.Fehlermeldung hat geschrieben:Die Anwendung konnte nicht gestartet werden, weil tk84.dll nicht gefunden wurde. Neuinstallation [kann helfen]
2.Fehlermeldung (s.o.) hat geschrieben: Traceback (most recent call last):
File "C:\Python24\cx_Freeze\initscripts\console.py", line 27, in ?
exec code in m.__dict__
File "[meinProgramm].py", line 2, in ?
File "C:\Python24\lib\lib-tk\Tkinter.py", line 37, in ?
import FixTk # Attempt to configure Tcl/Tk without requiring PATH
File "C:\Python24\lib\lib-tk\FixTk.py",line 24, in ?
import _tkinter
ImportError: DLL load failed: Das angegebene Modul wurde nicht gefunden
Das einzige was ich komisch finde, ist "\initscripts\console.py", aber sagt mir nix. Weiß vlt. einer, wenns mit cx nicht geht, wies mit py2exe geht?
Da hatte ich auch schon mal Probleme mit Tkinter und noch mehr mit Tix...

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

Die Datei ``tk84.dll`` manuell in den Ordner mit den EXE-Dateien zu kopieren scheidet aus?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Hallo!
Leonidas hat geschrieben:Die Datei ``tk84.dll`` manuell in den Ordner mit den EXE-Dateien zu kopieren scheidet aus?
Ne, aber es reicht nicht...

So, ich hab es jetzt mit py2exe versucht. Trotz include-liste mit allen benötigten Modulen ging es erst immer noch nicht, da die Module ja weitere benötigen, die nicht automatisch mitkopiert werden.
Jetzt hab ich manuell nach den error-logs alle pyc.-Dateien in den zip-Ordner kopiert, und das erste Programm läuft auch schon.
Problem: Die Tix-Programme.
Log-Datei hat geschrieben:Traceback (most recent call last):
File "sudoku1.2.py", line 474, in ?
File "sudoku1.2.py", line 300, in __init__
File "Tix.pyc", line 210, in __init__
_tkinter.TclError: can't find package Tix
Die Tix.pyc ist im zip-Ordner, aber er sucht ja ein Paket. Was tun?
Außer der Tix.pyc gibt es doch keine Datei, oder?
Vlt. ein Paket machen? Also nen Ordner Tix wo die Tix.pyc und ne leere __init__-Datei drin sind?
Ist das kompliziert...

Gruß, jj
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Es geht! :lol:
Diese Seite hilft: http://www.py2exe.org/index.cgi/TixSetup
Man muss echt den ganzen Ordner kopieren...
Ich hab jetzt ein setup.py in dieser Art:
(etwas suboptimal, aber immerhin, es funzt!)

Code: Alles auswählen

# -*- coding: cp1252 -*-
# setup.py
import glob
import os
import sys
from distutils.core import setup
import py2exe

scripts = ("Programm1.py", "Programm2.py","Programm3.py" ,"Programm4.py")
icons = (1, "pfad/zum/icon/für/programm1"),(2,"..."),(3, "...")

def files(folder):
    for path in glob.glob(folder+'/*'):
        if os.path.isfile(path):
            yield path
data_files=[
            ('.', glob.glob(sys.prefix+'/DLLs/tix81*.dll')),
            ('tcl/tix8.1', files(sys.prefix+'/tcl/tix8.1')),
            ('tcl/tix8.1/bitmaps', files(sys.prefix+'/tcl/tix8.1/bitmaps')),
            ('tcl/tix8.1/pref', files(sys.prefix+'/tcl/tix8.1/pref')),
           ]

for x in  range(3):
    setup(
      windows = [
        {  "script":  scripts[x],
           "icon_resources": [icons[x]]
        }
    ],
)
setup(
      windows = [ {"script":  scripts[3] }],
      options = {"py2exe":{"includes":['benötigtesModul1','bM2','...','eigenesModul1', '...']}},
      data_files=data_files,
)

Dabei werden die exe-Dateien in jedem Durchlauf für ein anderes Programm erzeugt und der Lib-Ordner und die anderen Dateien, die immer erzeugt werden, werden überschrieben. Deshalb muss man beim letzten Mal alle benötigten Module includen. :wink:

Gruß, jj :lol:
Antworten