2010-03-31 6 views
48

Sto usando Python 2.6 e cx_Freeze 4.1.2 su un sistema Windows. Ho creato setup.py per creare il mio eseguibile e tutto funziona correttamente.Come posso unire altri file quando uso cx_freeze?

Quando viene eseguito cx_Freeze, sposta tutto nella directory di creazione. Ho altri file che vorrei includere nella mia directory di build. Come posso fare questo? Ecco la mia struttura.

src\ 
    setup.py 
    janitor.py 
    README.txt 
    CHNAGELOG.txt 
    helpers\ 
     uncompress\ 
      unRAR.exe 
      unzip.exe 

Ecco il mio frammento:

configurazione

(name='Janitor', 
    version='1.0', 
    description='Janitor', 
    author='John Doe', 
    author_email='[email protected]', 
    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 
     ) 
     ] 
) 

io non riesco a farlo funzionare. Ho bisogno di un file MANIFEST.in?

risposta

92

Capito.

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 = '[email protected]', 
    options = {'build_exe': {'includes':includes,'excludes':excludes,'packages':packages,'include_files':includefiles}}, 
    executables = [Executable('janitor.py')] 
) 

Nota:

  • include_files deve contenere "solo" i percorsi relativi allo script setup.py altrimenti la costruzione fallirà.
  • include_files può essere un elenco di corda cioè un gruppo di file con i loro percorsi relativi
    o
  • include_files può essere una lista di tuple in cui la prima metà del tupla è il nome del file con il percorso assoluto ed il la seconda metà è il nome file di destinazione con il percorso assoluto.

(quando la mancanza della documentazione si pone, consultare Kermit la rana)

+2

Nizza lavoro. Vorrei poterti dare diversi voti! –

+0

Grazie Craig. Ho provato ad iscrivermi alla mailing list, ma non mi è stato permesso. Potresti aiutarmi, per favore? È possibile specificare la directory di destinazione? l'opzione 'include_files' ha semplicemente creato la stessa struttura di directory nella directory builds e scarica lì i file inclusi. Grazie. –

+2

Risolto anche questo. Ho passato alla fonte. È un peccato che funzioni come se non fossero documentati abbastanza bene. Mi piacerebbe aiutare a scrivere della documentazione per questo. –

6

C'è un esempio più complesso al http://wiki.wxpython.org/cx_freeze La documentazione mancante di tutte le opzioni è a http://cx-freeze.sourceforge.net/cx_Freeze.html

Con Cx_Freeze ho ancora tuttavia, a differenza di Py2Exe, ottiene un output di 11 file in una singola cartella.

Alternative: http://www.blog.pythonlibrary.org/category/packaging/

+0

cx_freeze non supporterà mai un file .exe a file singolo poiché l'elaboratore ritiene che gli "hack" utilizzati per fare una cosa del genere non siano puliti. Se si desidera un singolo file, si dovrà seguire Py2exe, ecco la [richiesta di funzionalità per il supporto Python3] (http://sourceforge.net/p/py2exe/feature-requests/20/). – dotancohen

+0

il tuo link alla documentazione mancante è morto. Se continui a utilizzare questo sito, mi piacerebbe un puntatore ai documenti sulle opzioni poiché sto arrivando a breve su di loro –

+0

J.F. Sebastian ha corretto il collegamento doc a una copia archiviata. [La pagina corrente] (http://cx-freeze.readthedocs.io/en/latest/distutils.html) sembra avere meno informazioni. –

1

Inoltre è possibile creare script separato che copierà i file dopo la compilazione. È quello che uso per ricostruire l'app su Windows (dovresti avere "GNU utilities for win32" installato per far funzionare "cp").

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 
1

Al fine di trovare i file allegati (include_files = [-> your attached files <-]) è necessario inserire la seguente funzione nel codice setup.py:

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) 

See cx-freeze: using data files

Problemi correlati