Problem mit py2exe,SIP

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
paeppi_79
User
Beiträge: 27
Registriert: Montag 13. Juli 2009, 19:33

Hallo Python Gemeinde,

ich möchte mein script als ausführbare Datei umwandeln und habe dabei Probleme mit einer SIP Fehlermeldung und bräuchte Hilfe.
Zuerst Infos zu meinem System bzw.verwendete Module:
Intel I7,Windows 7, Python2.7, PyQt4
Module im Script:
import os
import sys
from visu270114 import Ui_MainWindow
import thread
import webbrowser
import time
import kinterbasdb
from kinterbasdb import services
import subprocess
import login
import csv
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import QtGui,QtCore

Verwendete py2exe setup.py:


from distutils.core import setup
import py2exe, sys, os

sys.argv.append('py2exe')

setup(
options = {'py2exe': {'bundle_files': 1, 'compressed': True}},
windows = [{'script': "RMS.py"}],
zipfile = None,
)


Das setup läuft ohne Fehler durch, beim Starten der EXE kommt aber folgender Fehler:

Traceback (most recent call last):
File "RMS.py", line 5, in <module>
from visu270114 import Ui_MainWindow
File "zipextimporter.pyc", line 82, in load_module
File "visu270114.pyc", line 10, in <module>

File "zipextimporter.pyc", line 98, in load_module
ImportError: No module named sip


Für mich sieht es so aus als ob ein Problem mit SIP besteht, aber ist dies nicht schon mit dem Installer von PyQT4 installiert worden?
Im Script kann ich durch import sip das modul importieren, ohne Fehler.
Kann evtl. ein Prolem zwischen mingw und SIP bestehen, wass und wie muss installiert werden?

Komme an dem Punkt nicht weiter und bräuchte bitte einen Lösungsansatz!

Vielen Dank! :K
BlackJack

Im Netz gesucht hast Du anscheinend nicht, denn im Wiki von py2exe steht dazu etwas was bei mir der erste Suchtreffer zu ”py2exe sip” war: http://www.py2exe.org/index.cgi/Py2exeAndPyQt
paeppi_79
User
Beiträge: 27
Registriert: Montag 13. Juli 2009, 19:33

Hallo BlackJack,

doch hab schon geschaut, mit py2exe nur noch nicht gearbeitet und naja man sieht da den Wald vor lauter bäumen nicht. Danke erst einmal für die schnelle Reaktion und Hilfe
Der SIP Fehler ist erst einmal weg, jedoch hab ich einen Neuen:

Traceback (most recent call last):
File "RMS.py", line 9, in <module>
import kinterbasdb
File "zipextimporter.pyc", line 82, in load_module
File "kinterbasdb\__init__.pyc", line 119, in <module>
File "zipextimporter.pyc", line 98, in load_module
ImportError: MemoryLoadLibrary failed loading kinterbasdb\_kinterbasdb.pyd

Muss ich jedes Modul in die setup.py manuell schreiben? Ich dachte das macht py2exe alleine? Laut console hat er es doch getan?
BlackJack

@paeppi_79: Die Fehlermeldung kann eine ganze Menge bedeuten. Letztendlich alles was dazu führt, dass eine DLL/C-Erweiterung nicht geladen werden konnte. Zum Beispiel auch wenn die ihrerseits wieder irgendwelche DLLs benötigt, die mit ausgeliefert werden müssen.

Module muss man nur angeben wenn py2exe nicht selbst herausfinden konnte das sie benutzt werden. Dazu wird der Code analysiert. Die Abhängigkeit vom `sip`-Modul steckt aber zum Beispiel in kompiliertem C++-Code, und das kann py2exe nicht erkennen.
paeppi_79
User
Beiträge: 27
Registriert: Montag 13. Juli 2009, 19:33

Hallo BlackJack,

ich habe das Programm als .exe erst einmal zu laufen bekommen, dumm nur dass etwa 60% aller Icons nicht da sind und alle Bilder im .jpg-Format ebenfalls nicht.
Diese befinden sich in separaten Ordnern, welche ich in der Setup.py eingetragen habe. Die Ordner sind mit den entsprechenden Dateien befüllt!

code:


from distutils.core import setup
import py2exe, sys, os
import glob

sys.argv.append('py2exe')


setup(
name="RMS",
version="2.5",
description="RMS",
author="paeppi",
options = {'py2exe': {'bundle_files': 3, 'compressed': True, "includes" : ["sip"],'packages':['kinterbasdb']}},
windows = [{'script': "RMS.py"}],
data_files=[("Bilder",glob.glob("Bilder/*.*")),("ico",glob.glob("ico/*.*")),("DLL",glob.glob("DLL/*.*")), ("docs",glob.glob("docs/*.*"))],
zipfile = None,
)


Hast du bzw. jemand eine Idee warum dies so ist! Für eure Hilfe wäre ich dankbar, da die Zeit drängt und ich das Programm testen muss!
Antworten