Kann ich die Architektur (32bit vs. 64bit) beim Erstellen einer pyinstaller-Programmdatei steuern?
Kurze Frage
Gibt es eine Möglichkeit zu Steuern /Garantie für die Architektur (32bit vs 64bit) beim Bau einer pyinstaller ausführbare Datei?
Hintergrund
Ich migriert von py2exe zu pyinstaller wegen der fehlenden 64bit-Unterstützung zusammen mit einer Reihe von kleinen Dinge, die ich habe eine harte Zeit der Suche vorbei. Also in diesem Sinne, ich würde lieber nicht wieder an zu gehen. Ich entwickelte zwei Anwendungen mit Python 2.7 64-bit und bin mit performance-Problemen, wenn auf Ihnen laufen, 32-bit-Maschinen.
Die erste ist eine einfache wxPython GUI (version 2.9) und stellt eine Verbindung zu einer windows-DLL-Datei für einen USB-Treiber. Dieser scheint ziemlich "sicher" zu laufen als 32 bit, weil es keine Module, die 64-bit nur. Jedoch diese Anwendung, wenn Sie unter Windows XP 32bit hat schreckliche performance-Probleme beim sprechen, um das USB-Gerät.
Die zweite Anwendung ist sehr viel größer und ich habe nicht versucht, build und run noch wegen der Angst vor der Architektur Fragen. Diese Anwendung hat eine Anzahl 64bit-nur Module (psycopg2) verwendet. Ich möchte zu bleiben Weg von dem Versuch, dieses zu bauen, wenn es unmöglich zu laufen als 32-bit-ausführbare Datei.
Aktuellen Gedanken
Ich fühle, dass dies möglich sein könnte (wenn die Module haben 32bit-Unterstützung) mit dem build.py mit Python gezwungen, in 32-bit-Modus. Macht das Sinn?
Update
Ich hatte mehrere Durchbrüche auf dem ersten Programm, das ich baute. Es stellt sich heraus, die performance-Probleme, war einzig und allein basierend auf der Geschwindigkeit der beiden Maschinen. Meine dev-Maschine hatte genug Kraft, um Umfrage das USB-Gerät schnell genug ist und die viel langsamer-test-Plattform (Windows XP) nicht.
Ich das Problem behoben, indem die Art, die ich befragte den USB-port. Nun, dass dies behoben wurde, konnte ich die exe-Datei auf beiden Systemen. Ein neues problem hatte, wenn Sie versuchen, erstellen Sie die ausführbare Datei als einzelne Datei. Beim ausführen von pyinstaller ist Build.py es zieht Sie alle erforderlichen DLL ' s, die app muss laufen. Dies schien gut zu funktionieren auf den ersten, aber als ich versuchte, führen Sie die exe-Datei, die ich gebaut habe auf Windows 7 64bit, es würde nicht auf Windows XP ausgeführt werden, da der USB-dongle ist DLL wurde nicht als eine gültige erkannt DLL.
Um die einzelne exe-Datei für die Ausführung in beiden Systemen, habe ich zunächst versucht zu entfernen, die DLL aus der .spec-Datei (die offenbar zu einem python-Skript). Es war bequem, weil ich war in der Lage zu ändern die Liste enthält vor der build-Befehl mit normalen python-Liste mit Modifikatoren. Meine Hoffnung war, dass wenn die DLL nicht gefunden wurde in der exe-temp-Verzeichnis würde es finden, es auf dem system PFAD. Während dieser Ansatz könnte Arbeit, ich konnte es nicht ausführen, ohne dass viele Fehler.
Mein zweiter Versuch war um die Anwendung zu erstellen, auf dem Windows XP Rechner (wobei die DLL eingebettet), in der Hoffnung, dass die Win XP-DLL funktioniert in Windows 7. Erfolg! Diese Konfiguration funktioniert gut; aber ich glaube fest daran, dass dies nicht die beste Lösung ist, hängt ausschließlich von den älteren DLL läuft auf einem neueren OS.
InformationsquelleAutor der Frage Adam Lewis | 2011-08-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Pyinstaller erzeugt eine binäre abhängig von der python, die Sie verwendet, um es zu bauen. Also, wenn Sie python 2.7 64-bit ist es nicht möglich, soweit ich weiß, produzieren ein 32 bit-Programm. Dies ist, weil Pyinstaller Archiv sind alle Module und Ihre Abhängigkeiten (dlls, pyds etc..), die 64-bit-aufgrund der python installieren.
Wie schon gesagt ist es besser, aufgrund von cross-Kompatibilität issues, build 32-bit-Binärdateien.
Wahrscheinlich können Sie angeben, mehr auf Ihre Frage.
InformationsquelleAutor der Antwort J_Zar
Wenn Sie eine Anwendung erstellen und es läuft einwandfrei auf 32-bit-Windows, es gibt keine Notwendigkeit, erstellen Sie eine 64-bit-version. Erstellen Sie einfach einen 32-bit-version und führen Sie es auf beiden Architekturen. Was ist das, was WOW64 ist.
Wenn Sie müssen, verwenden Sie eine Bibliothek oder ein feature, welches nur für 64 bit, nur auf 64-bit-version. Es gibt keinen Punkt in den Aufbau einer 32-bit-version, wenn das feature nur für 64 bit.
Nur deshalb zu bauen, die eine 64-bit-und 32-bit-version, um die Vorteile der vergrößerten Adressraum von 64-bit-windows. I. e. wenn Sie beabsichtigen, weisen Sie mehr als 1 oder 2 GB Speicher. Ein Beispiel wäre ein Bild-editing-Anwendung, oder eine Daten-Manipulations-Anwendung. Dann können Sie laufen auf 32-bit-Plattformen innerhalb der Einschränkungen der Plattform, sondern Bearbeiten auch größere Bilder oder größere Mengen von Daten auf 64-bit-Plattformen.
IOW, für Ihren Fall Folgen Sie dem Vorschlag von @Velociraptoren und bauen im 32-bit-python wenn Sie eine 32-bit-exe-Datei.
InformationsquelleAutor der Antwort Ben