Wie kann ich andere Dateien bündeln, wenn cx_freeze verwenden?
Frage
Ich verwende Python 2.6 und cx_Freeze 4.1.2 auf einem Windows-System. Ich habe die setup.py erstellt meine ausführbare Datei und alles funktioniert zu bauen.
Wenn cx_Freeze läuft, bewegt er sich alles rund um das build
Verzeichnis. Ich habe einige andere Dateien, dass ich in meinem build
Verzeichnis enthalten mag. Wie kann ich das machen? Hier ist meine Struktur:
src\
setup.py
janitor.py
README.txt
CHNAGELOG.txt
helpers\
uncompress\
unRAR.exe
unzip.exe
Hier ist mein Snippet:
Setup
( name='Janitor', version='1.0', description='Janitor', author='John Doe', author_email='john.doe@gmail.com', url='http://www.this-page-intentionally-left-blank.org/', data_files = [ ('helpers\uncompress', ['helpers\uncompress\unzip.exe']), ('helpers\uncompress', ['helpers\uncompress\unRAR.exe']), ('', ['README.txt']) ], executables = [ Executable\ ( 'janitor.py', #initScript ) ] )
Ich kann nicht scheinen dies zur Arbeit zu kommen. Brauche ich eine MANIFEST.in
Datei?
Lösung
es herausgefunden.
from cx_Freeze import setup,Executable
includefiles = ['README.txt', 'CHANGELOG.txt', 'helpers\uncompress\unRAR.exe', , 'helpers\uncompress\unzip.exe']
includes = []
excludes = ['Tkinter']
packages = ['do','khh']
setup(
name = 'myapp',
version = '0.1',
description = 'A general enhancement utility',
author = 'lenin',
author_email = 'le...@null.com',
options = {'build_exe': {'includes':includes,'excludes':excludes,'packages':packages,'include_files':includefiles}},
executables = [Executable('janitor.py')]
)
Hinweis:
-
include_files
enthalten muss "nur" relative Pfade zumsetup.py
Skript sonst das Build fehl. -
include_files
kann das heißt eine Reihe von Dateien mit ihren relativen Pfaden eine Liste der Zeichenfolge sein
oder -
include_files
kann eine Liste von Tupeln, in dem die erste Hälfte des Tupels ist der Dateiname mit dem absoluten Pfad und der zweiten Hälfte wird der Zieldateiname mit dem absoluten Pfad.
(Wenn das Fehlen der Dokumentation entsteht, konsultieren Kermit der Frosch)
Andere Tipps
Es ist ein komplexeres Beispiel an: cx_freeze - wxPyWiki
Die fehlende Dokumentation aller Optionen ist unter: cx_Freeze (Internet Archive)
Mit cx_Freeze
, habe ich noch eine Build-Ausgabe von 11 Dateien in einem einzigen Ordner erhalten, obwohl im Gegensatz zu Py2Exe
.
Alternativen: Verpackung | Die Maus Vs. Python
Um Ihre angehängten Dateien zu finden (include_files = [-> your attached files <-]
) sollten Sie die folgende Funktion in Ihrem setup.py Code einfügen:
def find_data_file(filename):
if getattr(sys, 'frozen', False):
# The application is frozen
datadir = os.path.dirname(sys.executable)
else:
# The application is not frozen
# Change this bit to match where you store your data files:
datadir = os.path.dirname(__file__)
return os.path.join(datadir, filename)
Sie können auch getrennte Skript erstellen, die Dateien nach dem Build kopiert. Es ist, was ich die App auf Fenster für den Wiederaufbau verwenden (Sie sollten „GNU-Utilities für win32“ installiert haben, um „cp“ Werke zu machen).
build.bat:
cd .
del build\*.* /Q
python setup.py build
cp -r icons build/exe.win32-2.7/
cp -r interfaces build/exe.win32-2.7/
cp -r licenses build/exe.win32-2.7/
cp -r locale build/exe.win32-2.7/
pause