Frage

baute ich eine ziemlich einfache Anwendung in Python 3.1 PyQt4 verwenden. getan, ich will installiert, ohne entweder von denen, Computern wird die Anwendung verteilt werden.

ich über Windows-Plattformen fast ausschließlich kümmern, so mein Ziel ist es, eine einzelne ausführbare Datei zu haben, und vielleicht einige Ressourcendateien und .dlls am Ende.

Nachdem gesucht um, kam ich zu dem Schluss, dass

  • py2exe unterstützt Python nur bis zur Version 2.7
  • pyinstaller unterstützt Python nur bis zur Version 2.6
  • cx_Freeze hat für mich keine Arbeit, weil ich immer den folgenden Fehler halten, wenn ich meine erfolgreich auszuführen bauen binary:

Y:\Users\lulz\build\exe.win32-3.1>system_shutdown.exe
Traceback (most recent call last):
File "Y:\Program Files (x86)\Python\lib\site-packages\cx_Freeze\initscripts\Console3.py", line 27, in exec(code, m.__dict__)
File "Y:/Users/lulz/Documents/Coding/Python3/projects/System Shutdown/system_shutdown.pyw", line 5, in from PyQt4 import QtCore
File "ExtensionLoader_PyQt4_QtCore.py", line 16, in AttributeError: 'NoneType' object has no attribute 'modules'

Also mein Problem ist im Grunde zwei Probleme:

  1. Gibt es eine andere Art und Weise aber cx_Freeze zu bauen Binärdateien mit meiner Konfiguration?
  2. Wenn nicht, was könnte das cx_Freeze Problem sein?

kann ich weitere Informationen über das zweite Problem, wenn nötig, wie mein Ruf cx_Freeze, meinen distutils Setup-Skript usw. liefern.

Vielen Dank schon mal für eure Hilfe und Kommentare.

War es hilfreich?

Lösung

Sie können dieses Problem beheben, indem eine Zeile Code zu freeze.py in Ihrem cx_Freeze Paket angehängt wird.

Es ist hier beschrieben: http://www.mail-archive.com /cx-freeze-users@lists.sourceforge.net/msg00212.html

Es funktioniert für mich zumindest:)

Cheers,   Almar

Andere Tipps

Für Python 3.3 und später, gibt es eine gute Auflösung hier: py2exe - erzeugen einzelne ausführbare Datei

Installieren py2exe:

pip install py2exe

Dann fügen Sie neben 'your_script.py' Datei, die folgende 'Make_exe.py' file:

from distutils.core import setup
import py2exe, sys

class Make_exe():
    def __init__(self, python_script):
        sys.argv.append('py2exe')

        setup(
            console=[{'script': python_script}],
            zipfile = None,
            options={
                'py2exe': 
                {
                    'bundle_files': 1, 
                    'compressed': True,
                    # Add includes if necessary, e.g. 
                    'includes': ['lxml.etree', 'lxml._elementpath', 'gzip'],
                }
            }
        )

if __name__ == '__main__':
    Make_exe('your_script.py')

Und wenn Sie wollen, machen 'your_script.py' Wiederaufbau selbst als 'your_script.exe' jedes Mal, wenn Sie es laufen in Python können Sie zu seiner Haupt hinzufügen :

import subprocess
import sys

if __name__ == '__main__':
    currentFile = sys.argv[0]
    if currentFile.lower().endswith(".py"):
        exitCode = subprocess.call("python Make_exe.py")
        if exitCode==0 :
            dirName = os.path.dirname(currentFile)
            exeName = os.path.splitext(os.path.basename(currentFile))[0] + '.exe'
            exePath = dirName + "/dist/" + exeName
            cmd = [exePath] + sys.argv[1:]
            print ("Executing command:\n %s" % cmd)
            exitCode = subprocess.call(cmd)
        sys.exit(exitCode)
    else:
        print ("This will be executed only within the new generated EXE File...")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top