2013-10-23 10 views
6

Il file PyInstaller .spec è pensato per essere portatile tra le tre piattaforme supportate: Windows, Mac OS X e Linux.Come posso rendere effettivamente portatili i file .spec di PyInstaller? (guasta il percorso assoluto per il parametro 'pathex')

Trovo molto più facile generare il file .spec una volta e modificarlo a piacimento prima di creare un file eseguibile da esso.

In tutti gli esempi su Internet (ad esempio this one), il file .spec sarebbe sempre definire un percorso assoluto in per il parametro pathex nella sezione di analisi. Ciò rende la generazione non portabile, poiché il percorso assoluto non è specifico solo per la macchina su cui viene eseguita la build, ma anche per la piattaforma.

Questo deve sempre essere un percorso assoluto o esiste un modo per renderlo completamente portatile?

risposta

2

pathex ora sembra essere convertito in un elenco di percorsi assoluti se non lo è già.

Vedi PyInstaller build.py line #426

Il file .spec è certamente portatile che è letteralmente codice sorgente Python. :) Così puoi scrivere qualunque logica tu abbia bisogno all'interno del tuo file .spec.

Per esempio, i miei file spec chiamano routine di supporto che escludono la maggior parte della codifica. * Dati che non si cura di, _ssl, ecc ...

+1

Codice attualmente in https://github.com/pyinstaller/pyinstaller/blob/develop/PyInstaller/building/build_main.py#L168? –

+0

Sembra corretto, sì. –

3

pathex è una lista opzionale di percorsi per essere cercato prima di sys.path

Fonte: https://github.com/pyinstaller/pyinstaller/blob/develop/PyInstaller/building/build_main.py#L123

di file La specifica è in realtà il codice Python eseguibile. PyInstaller crea l'app eseguendo il contenuto del file spec.

Fonte: https://github.com/pyinstaller/pyinstaller/blob/develop/doc/spec-files.rst#using-spec-files

Ciò porta alla conclusione che si dovrebbe essere in grado sia hardcode ogni percorso per i tre ambienti in questo modo

pathex=["/Users/fatuhoku/Python/myapp", "C:\\Python\\myapp", "/home/fatuhoku/Python/myapp"], 

o chiamare una funzione Python intrecciata che solo restituisce un elencare con un singolo elemento che è la directory di lavoro corrente.

Se si esegue PyInstaller ti dice qualcosa di simile:

46 INFO: Extending PYTHONPATH with paths 
['current directory', 'your-configured-pathex-here'] 

Se si inserisce il file .spec nella sua posizione predefinita è possibile semplicemente rimuovere pathex dalla spec perché 'current directory' e 'your-configured-pathex-here' sono identici in ogni caso.