Frage

Ich dachte, ich hörte, dass py2exe der Lage war, dies zu tun, aber ich dachte, es nie aus. Hat jemand erfolgreich getan? Kann ich Ihre setup.py-Datei zu sehen, und was Sie Befehlszeilenoptionen verwendet?

Im Grunde denke ich an es mir eine einzige ausführbare Datei geben, die etwas tut, wie sich unzips zu vielleicht / temp und läuft.

War es hilfreich?

Lösung

PyInstaller wird eine einzelne EXE-Datei ohne Abhängigkeiten schaffen; Verwenden Sie die Option --onefile. Es tut dies, indem alle benötigten gemeinsamen Bibliotheken in die ausführbare Packen und Auspacken, bevor es läuft, wie Sie es beschreiben (EDIT: py2exe auch über diese Funktion verfügt, finden Sie unter minty Antwort )

Ich verwende die Version von PyInstaller aus dem SVN, da die neueste Version (1.3) etwas veraltet ist. Es arbeitet sehr gut für eine Anwendung, die auf PyQt abhängt, PyQwt, numpy, scipy und ein paar mehr.

Andere Tipps

Die Art und Weise, dies mit py2exe zu tun ist, um die bundle_files Option in Ihrer setup.py-Datei zu verwenden. Für eine einzelne Datei möchten Sie bundle_files bis 1, compressed auf True, und stellen Sie die Zip-Datei Option auf Keine eingestellt. Auf diese Weise schafft eine komprimierte Datei für die einfache Verteilung.

Hier ist eine vollständigere Beschreibung der bundle_file Option direkt von der py2exe Website *

  

Mit "bundle_files" und "Zip-Datei"

     

Eine einfache (und besser) Art und Weise zu erstellen   Single-File-Executables ist gesetzt   bundle_files bis 1 oder 2 und einzustellen   ZipFile auf Keine. Dieser Ansatz funktioniert   erfordert keine Dateien ein Extrahieren   temporären Speicherort, der vorsieht,   viel schneller Programmstart.

     

Gültige Werte für bundle_files sind:

     
      
  • 3 (default) nicht bündeln
  •   
  • 2 Bündel alles, aber das Python-Interpreter
  •   
  • 1 Bündel alles, einschließlich der Python-Interpreter
  •   
     

Wenn zipfile auf None gesetzt ist, werden die Dateien sein Bündel   innerhalb der ausführbaren Datei statt library.zip.

Hier ist ein Beispiel 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': "single.py"}],
    zipfile = None,
)

Als das andere Plakat erwähnt, py2exe, wird eine ausführbare + einige Bibliotheken laden erzeugen. Sie können auch einige Daten zu Ihrem Programm hinzufügen müssen.

Der nächste Schritt ist ein Installationsprogramm zu verwenden, das alles in einer einzigen, einfach zu bedienende installierbar / unistallable Programm zu verpacken.

Ich habe verwendet InnoSetup ( http://www.jrsoftware.org/isinfo.php mit Freude) mehrere Jahre und für kommerzielle Programme, so dass ich es von ganzem Herzen empfehlen.

Sie sollten ein Installationsprogramm erstellen, wie zuvor erwähnt. Obwohl es auch möglich ist, py2exe zu lassen, alles in einer einzigen ausführbaren zu bündeln, von bundle_files Option auf 1 und das zipfile Schlüsselwort Argument Keine Einstellung, ich habe nicht diese empfehlen für PyGTK Anwendungen.

Das ist, weil von GTK + versucht, seine Datendateien (Einheimischer, Themen, etc.) aus dem Verzeichnis aus geladen wurde zu laden. Sie müssen also sicherstellen, dass das Verzeichnis der ausführbaren Datei enthält auch die von GTK + verwendeten Bibliotheken und Verzeichnisse lib, teilen und usw. von Ihrer Installation von GTK +. Andernfalls erhalten Sie Probleme an einer Maschine Ihrer Anwendung läuft, auf dem GTK + nicht systemweit installiert ist.

Für weitere Details lesen Sie meine Leitfaden für PyGTK Anwendungen py2exe. Es erklärt auch, wie alles zu bündeln, aber GTK +.

Ich habe in der Lage gewesen, eine einzelne EXE-Datei mit allen Ressourcen in die exe embeded zu erstellen. Ich baue auf Fenster. so wird, dass einige der os.system Anrufe erklären ich verwende.

Zuerst versuchte Umwandlung ich alle meine Bilder in bitmats und dann alle meine Daten-Dateien in Text-Strings. aber dies verursachte die endgültige exe sehr, sehr groß sein.

Nach googleing für eine Woche habe ich herausgefunden, wie py2exe Skript zu ändern, meine Bedürfnisse zu erfüllen.

Hier ist der Patch Link auf Source i eingereicht, bitte Kommentare schreiben, damit wir sie bekommen, die in die nächste Verteilung.

http://sourceforge.net/tracker/index. php? func = detail & aid = 3334760 & group_id = 15583 & Atid = 315.583

Dieses explanes all Änderungen vorgenommen hat, hinzugefügt habe ich einfach eine neue Option, um die Setup-Linie. hier ist mein setup.py.

Ich werde versuchen, es zu kommentieren, so gut ich kann. Bitte beachten Sie, dass mein setup.py der Tatsache, komplex, ist, dass ich bin die Bilder nach Dateinamen zugreifen. so muß ich eine Liste speichert den Überblick zu behalten.

Das ist von einem Mangel-to-b-Bildschirmschonern I zu machen versuchen.

I exec verwenden, um mein Setup zur Laufzeit zu generieren, seine easyer zu schneiden und so einzufügen.

exec "setup(console=[{'script': 'launcher.py', 'icon_resources': [(0, 'ICON.ico')],\
      'file_resources': [%s], 'other_resources': [(u'INDEX', 1, resource_string[:-1])]}],\
      options={'py2exe': py2exe_options},\
      zipfile = None )" % (bitmap_string[:-1])

Aufschlüsselung

script = py Skript Ich möchte eine exe-Datei drehen

icon_resources = das Symbol für die exe

file_resources = Dateien möchte ich in die exe einbetten

other_resources = eine Zeichenkette in die exe einzubetten, in diesem Fall eine Dateiliste.

Optionen = py2exe Optionen für alles in eine exe-Datei erstellen

bitmap_strings = eine Liste von Dateien schließen

Bitte beachten Sie, dass file_resources ist keine gültige Option, bis Sie Ihre py2exe.py Datei bearbeiten, wie in dem Link oben beschrieben.

erste Mal, dass ich versucht habe, auf dieser Seite Code zu schreiben, wenn ich es falsch tun Flamme mich nicht.

from distutils.core import setup
import py2exe #@UnusedImport
import os

#delete the old build drive
os.system("rmdir /s /q dist")

#setup my option for single file output
py2exe_options = dict( ascii=True,  # Exclude encodings
                       excludes=['_ssl',  # Exclude _ssl
                                 'pyreadline', 'difflib', 'doctest', 'locale',
                                 'optparse', 'pickle', 'calendar', 'pbd', 'unittest', 'inspect'],  # Exclude standard library
                       dll_excludes=['msvcr71.dll', 'w9xpopen.exe',
                                     'API-MS-Win-Core-LocalRegistry-L1-1-0.dll',
                                     'API-MS-Win-Core-ProcessThreads-L1-1-0.dll',
                                     'API-MS-Win-Security-Base-L1-1-0.dll',
                                     'KERNELBASE.dll',
                                     'POWRPROF.dll',
                                     ],
                       #compressed=None,  # Compress library.zip
                       bundle_files = 1,
                       optimize = 2                        
                       )

#storage for the images
bitmap_string = '' 
resource_string = ''
index = 0

print "compile image list"                          

for image_name in os.listdir('images/'):
    if image_name.endswith('.jpg'):
        bitmap_string += "( " + str(index+1) + "," + "'" + 'images/' + image_name + "'),"
        resource_string += image_name + " "
        index += 1

print "Starting build\n"

exec "setup(console=[{'script': 'launcher.py', 'icon_resources': [(0, 'ICON.ico')],\
      'file_resources': [%s], 'other_resources': [(u'INDEX', 1, resource_string[:-1])]}],\
      options={'py2exe': py2exe_options},\
      zipfile = None )" % (bitmap_string[:-1])

print "Removing Trash"
os.system("rmdir /s /q build")
os.system("del /q *.pyc")
print "Build Complete"

ok, das ist es für die setup.py jetzt die Magie benötigt Zugriff die Bilder. Ich entwickeln diese App ohne py2exe im Sinne es dann später hinzugefügt. so haben Sie Zugang zu den beiden Situationen sehen. wenn der Bildordner kann nicht gefunden werden es versucht, die Bilder von den exe Ressourcen zu ziehen. der Code wird es erklären. dies ist ein Teil meiner Sprite-Klasse und verwendet es eine directx. Sie können aber jede api verwenden Sie wollen oder einfach nur die Rohdaten zugreifen. spielt keine Rolle.

def init(self):
    frame = self.env.frame
    use_resource_builtin = True
    if os.path.isdir(SPRITES_FOLDER):
        use_resource_builtin = False
    else:
        image_list = LoadResource(0, u'INDEX', 1).split(' ')

    for (model, file) in SPRITES.items():
        texture = POINTER(IDirect3DTexture9)()
        if use_resource_builtin: 
            data = LoadResource(0, win32con.RT_RCDATA, image_list.index(file)+1) #windll.kernel32.FindResourceW(hmod,typersc,idrsc)               
            d3dxdll.D3DXCreateTextureFromFileInMemory(frame.device,   #Pointer to an IDirect3DDevice9 interface
                                              data,                #Pointer to the file in memory
                                              len(data),           #Size of the file in memory
                                              byref(texture))      #ppTexture
        else:
            d3dxdll.D3DXCreateTextureFromFileA(frame.device, #@UndefinedVariable
                                               SPRITES_FOLDER + file,
                                               byref(texture))            
        self.model_sprites[model] = texture
    #else:
    #    raise Exception("'sprites' folder is not present!")

Haben Sie Fragen fragen fiel.

Ich habe gehört, dass bbfreeze wird eine einzelne Datei .EXE erstellen, und ist neuer als py2exe.

try C_X freeze es kann eine gute Standalone erstellen

Ich habe vor kurzem verwendet py2exe eine ausführbare Datei für die post-Bewertung erstellen für Bewertungen zu Reviewboard zu senden.

Dies war das setup.py I verwendet

from distutils.core import setup
import py2exe

setup(console=['post-review'])

Es erstellt ein Verzeichnis der EXE-Datei und die benötigten Bibliotheken enthält. Ich glaube nicht, es möglich ist, py2exe zu verwenden, nur eine einzelne EXE-Datei zu erhalten. Wenn Sie, dass Sie benötigen, um ersten py2exe zu verwenden und dann irgendeine Form von Installationsprogramm verwenden, um die endgültigen ausführbar zu machen.

Eine Sache zu kümmern ist, dass alle Ei Dateien, die Sie in Ihrer Anwendung verwenden müssen dekomprimiert werden, sonst kann py2exe sie nicht enthalten. Dies ist in dem py2exe docs abgedeckt.

Nein, es ist nicht, dass Sie im Sinne einer einzigen ausführbaren Datei ist, die Sie erst danach eine Datei haben -. Aber Sie haben ein Verzeichnis, das für die Ausführung Ihres Programms alles, was Sie enthält benötigen, einschließlich einer exe-Datei

Ich schrieb dieses setup.py heute. Sie müssen nur python setup.py py2exe aufzurufen.

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