Frage

Ich bin sehr neu in Python im Allgemeinen, aber ich habe eine app in Python 2.6 / wxPython 2.8, die perfekt funktioniert, wenn ich es durch Python laufen. Aber ich wollte noch einen Schritt weiter gehen und in der Lage sein, es als eine ausführbare Windows-Datei zu implementieren, so dass ich habe py2exe auszuprobieren. Aber ich habe nicht in der Lage gewesen, um es zu arbeiten. Es wäre immer eine exe kompilieren, aber wenn ich versuche, um tatsächlich läuft, dass es einige kryptische Fehlermeldung bellt. Zuerst waren sie einfache Botschaften sagen, es ist nicht sicher, DLLs finden konnte, aber auch nachdem er alle DLLs gibt es wollte, es gibt jetzt so aus:

The application failed to initialize properly (0xc0000142).
Click OK to terminate the application.

Also ich Dinge brach und machte nur ein sehr, sehr einfache Anwendung unter Verwendung WxPython nur um zu sehen, ob das funktionieren würde, oder wenn einige der komplizierteren Funktionen meiner ursprünglichen App wurden in die Quere. Aber auch mein einfacher Test ergab den gleichen Fehler. Hier ist der Code für die einfache Testskript:

import wx

class MainWindow(wx.Frame):

    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, wx.ID_ANY, title, style=wx.DEFAULT_FRAME_STYLE ^ wx.MAXIMIZE_BOX)
        panel = wx.Panel(self, -1, style = wx.TAB_TRAVERSAL | wx.CLIP_CHILDREN | wx.FULL_REPAINT_ON_RESIZE)
        main_sizer = wx.BoxSizer(wx.VERTICAL)

        testtxt = wx.StaticText(panel, -1, label='This is a test!')
        main_sizer.Add(testtxt, 0, wx.ALIGN_CENTER)

        panel.SetSizerAndFit(main_sizer)
        self.Show(1)
        return

app = wx.PySimpleApp()
frame = MainWindow(None, -1, 'Test App')
app.MainLoop()

Und hier ist der py2exe Setup-Skript, das ich verwenden:

#!/usr/bin/python

from distutils.core import setup
import py2exe

manifest = """
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
    version="0.64.1.0"
    processorArchitecture="x86"
    name="Controls"
    type="win32"
/>
<description>Test Program</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="X86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>
"""

setup(
    windows = [
        {
            "script": "testme.py",
            "icon_resources": [(1, "testme.ico")],
            "other_resources": [(24,1, manifest)]
        }
    ],
  data_files=["testme.ico"]

)

Dann laufe ich python setup.py py2exe, erzeugen sie die EXE-Datei, warnen vor einigen DLL-Dateien (die ich anschließend in das dist-Verzeichnis kopieren), aber dann, wenn ich versuche, die EXE-Datei ausführen, bekomme ich den Fehler, den ich sofort oben zitiert.

War es hilfreich?

Lösung

Beachten Sie, dass es eine neuere Version des Visual C ++ ist 2008 Redistributable Paket: SP1 . Doch sowohl die SP1 und die frühere Version nicht den DLLs in den Pfad installieren. Wie die Download-Seite sagt (Hervorhebung von mir):

  

Dieses Paket installiert Laufzeit   Komponenten C Runtime (CRT),   Standard C ++, ATL, MFC, OpenMP und   MSDIA-Bibliothek installiert. Für Bibliotheken, die   Trägerseite-an-Seite-Bereitstellungsmodell   (CRT, SCL, ATL, MFC, OpenMP) sie sind    in die native Montage installiert   Cache, auch WinSxS Ordner genannt, auf   Versionen von Windows-Betriebssystem   dass Unterstützung Side-by-Side-Baugruppen.

Sie werden wahrscheinlich diese Dateien im Ordner %WINDIR%\WinSxS finden und nicht in den path.What Ich glaube, Sie tun müssen, ist die Manifest Informationen für den relevanten DLLs zu integrieren (in %WINDIR%\WinSxS\Manifests gefunden) in Ihrem setup.py. ich Im folgenden Abschnitt hinzugefügt:

<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.VC90.CRT"
            version="9.0.30729.4918"
            processorArchitecture="X86"
            publicKeyToken="1fc8b3b9a1e18e3b"
            language="*"
        />
    </dependentAssembly>
</dependency>

unmittelbar nach dem bestehenden <dependency> Abschnitt, und baut die exe: es ohne Probleme läuft. Hinweis: , je nach genau, welche Version der Visual C ++ Dateien, die Sie die oben genannten Informationen installiert ist, können nicht genau richtig. Schauen Sie sich die Manifeste auf Ihrem System und verwenden Sie den richtigen version, publicKeyToken etc.

Alternativ sehen diese Antwort , wie der DLLs mit Ihrer Anwendung bereitstellen (im Gegensatz zu der Annahme sie bereits auf dem Zielsystem vorhanden ist). Oh ... Ich sehe Sie, dass die ursprüngliche Frage gestellt; -)

Andere Tipps

Ihre Frage war: Wie kann ich debug py2exe

Hier ist ein Tipp:

Wie für Ihr spezielles Problem, erwarte ich, dass Sie eine Lösung auf diesem vollständigere Thread Umgang mit dem gleichen Problem finden:

py2exe nicht eine ausführbare erzeugen

ich py2exe verwendet habe, bevor und ich habe noch nie eine Situation wie diese laufen ....

Doch es klingt wie fehlende Abhängigkeiten sind Ihr Problem .....

Ist die verpackte Programmarbeit auf Ihrem Rechner, aber nicht auf anderen?

Wenn ja, führen Sie die verpackte Anwendung innerhalb DEPENDS (Dependency Walker) auf beiden Maschinen und zu vergleichen, um zu erkennen, welche hoffentlich nicht enthalten bekommen Pakete.

Good Luck

Sie sollen nicht alle der .dlls kopieren es beschwert sich über! Einige von ihnen sind Windows-Systemdateien, und sie sind in den richtigen Stellen auf dem System. Wenn Sie sie in den dist-Ordner kopieren, die Dinge nicht korrekt funktionieren.

In der Regel wollen Sie nur .dlls kopieren, die für Ihre Anwendung spezifisch sind. Nicht-System-DLLs. In einigen Situationen müssen Sie vcredist_xx.exe in Ihrem Installateur versenden, den MSVC-Runtime auf dem System zu erhalten. Sie sollten niemals versuchen, selbst jene .dlls Dateien „raw“ zu versenden. Verwenden Sie das redist Paket, wird es sparen Sie Zeit und Frustration.

Haben Sie versucht, hier nach den Anweisungen: http://wiki.wxpython.org/SmallApp ?

Sind Sie sicher, dass Sie die gleichen DLLs geben, die man von WxPython verwendet.

Die vc ++ dlls von wxpython verwendet wird, kann von der wxpython Download-Seite heruntergeladen werden. Haben Sie versucht, diese ein?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top