2012-05-04 13 views
9

Distutils offre soluzioni esistenti per creare un EXE autoestraente di Windows. In particolare, posso creare il pacchetto anche se sono su Ubuntu (che è essenziale dato il nostro processo di compilazione automatizzato).Quali strumenti ci sono per creare un programma di installazione OSX per un pacchetto Python?

Come si crea un programma di installazione osx da una macchina Ubuntu?

(questo è per python 2,7)

+0

Quali sono esattamente le vostre esigenze? Vuoi semplicemente un file che può essere fatto doppio clic per avviare un programma di installazione o sarebbe sufficiente distribuire un pacchetto che può essere installato con un comando a una riga che gli utenti possono copiare e incollare? O vuoi distribuire il tuo pacchetto all'interno di un file .dmg che richiama un buon programma di installazione della GUI? –

+0

Dovrebbe essere altrettanto facile installare un .deb di ubuntu o un file EXE .exe. Abbiamo inoltre dipendenze (Setuptools) che desideriamo controllare e installare automaticamente se non sono presenti. L'installazione delle dipendenze viene eseguita nel .deb tramite l'elenco delle dipendenze esplicite e nel file .exe di windows specificando uno script di pre-installazione su bdist_wininst. Desideriamo inoltre avere uno script di post-installazione che, tra le altre cose, notifichi all'utente l'installazione riuscita/non riuscita/i passaggi successivi. – UsAaR33

risposta

4

Si potrebbe fare quanto segue, dal momento che OS X ha una fondazione UNIX. (Suppongo che abbia anche alcune utility standard come uudecode e unzip.);

  • Creare un file zip per il pacchetto con gli strumenti di pacchettizzazione Python standard, come le distutils.
  • Utilizzare uuencode file.zip file.zip >uu.txt per convertire questo file zip in testo.
  • Creare uno shell-script.
  • Inserire il testo generato da uuencode come here-document in quello script di shell, che viene inviato a uudecode, per ricreare il file zip. Questo dovrebbe essere il secondo comando nello script di shell. I primi comandi dovrebbero verificare le utilità necessarie.
  • Utilizzare qualsiasi strumento di installazione Python per installare il file zip.
  • Fai qualsiasi cosa di post-installazione che desideri.
  • Rimuovere il file zip.

Per installare il programma, eseguire lo shell-script. Su UNIX, questo script dovrebbe essere eseguito come root. Non so come sia gestito da OS X, però. Di seguito è riportato un esempio (il file zip incluso contiene due file con solo rumore casuale);

#!/bin/sh 
# Install script for foo 

# Check for special programs that are used in this script. 
PROGS="uudecode unzip python" 
for P in $PROGS; do 
    which $P >/dev/null 2>&1 
    if [ $? -ne 0 ]; then 
     echo "$(basename $0): The program \"$P\" cannot be found." 
     exit 1 
    fi 
done 

uudecode <<"EOF" 
begin 644 test.zip 
M4$L#!`H``````(<!K$`````````````````$`!P`9F]O+U54"0`#OHZM3ZB. 
MK4]U>`L``03I`P``!.D#``!02P,$"@``````A`&L0$EXM>H``@````(```<` 
M'`!F;V\O8F%R550)``.XCJU/N(ZM3W5X"P`!!.D#```$Z0,``)DCNBVSM81_ 
MA%IQ!+LKC\;\19[/E]F!`J2J*2:9B_8#MC^KM*]]9P1][email protected]+/H%Q"'2J' 
M,;$7:C9E+WC]%M(BAUFN]4D\$%F63!^CA8O>'0C(-!YD?$\GQ[;M:[email protected]>=A/[ 
M61XK<A/]\.?!0$QX<5]T\9<ZP$;_?PRMV-3O(NK)/<MTI,!RYA&OWRK6<8%4 
M_1!T/+-'7H^V#C[AK)+U?T>UCU."G]D(+JU[8Z#[email protected]'^10B:8.2$$9Q*@ 
MY:L4MK'^TVF)A5)9\%"/[email protected];]8\,I)$CCHHF#E&,D.GVM1=2N];4J?6WR 
M0+YH]DXZ"UQ$GVA^F(`5L![=/<ROX]9RQCRWJ=?+G4Y>56[H=8:!:GTA_V;V 
M2V$%U5([0D;T19H]P7+^448+^&M3;[/VJDEJ-SU=Q8U=3,IV^<)A>C)][email protected] 
[email protected]`!&`\-CP["]B'FC&K7Z)T6K_&W1K5?M&K8D&^'C^J;H[Q4/ST 
M(>QL].68#X)[email protected]`?9<R3#:4Y#A'X-<NT9C\OM3:4[<)`)[email protected]=*/[email protected]]VY 
M_R!__:Q'_FP3((*8^6JQ"$_H&BIWDD.6<"3D,'<1^=^.9F^2Z7.:OE"1,SV[ 
M)M(9!&V(4):?M7^JFR^P"!H4U+(*A;[email protected]+]5ZIS]B1;K)&@LJ-Y,L9SQ. 
M^Q-"&^@#KQG94$L#!`H``````(8!K$#%*"OR``(````"```'`!P`9F]O+V)A 
M>E54"0`#O(ZM3[R.K4]U>`L``03I`P``!.D#``!NFMNGLA(C_K!_F=T%?;P3 
M#TUC7%4F+!Y#A8<SFK[;E3M.%J`YT>1AVMNJPFOE58Q["7<#AWQFZ!SG_-RW 
M*4`@@P.7\>+LGTBNTLH-7)CB(LJDMD)COV5'H]O8G_4I&C:PFTVC%4P=+X*B 
M%A^I^$>BO+<!D\&8&GS:&VLQHJJ[!NFW0H5FD6+:'OUT2--U1HXQ2R?JF2,9 
M(/@>A(/SU#.78MTFADG`ZZTK!6:Z6\;I`2?D6I;FE=_0V?4>_0MC;$0$P?H% 
MDHQ]MCK4;,5W=<IZV<)<`7A_B7<_=U,:X[8/$_&/518\NNBDYS,\<',K2C]9 
M4M.5UL/R<\'0E>G#$>`I>/[UX$QM.+T\LF4;D^WF6FX3.(L?2V<5B%5)$!5[ 
ME47K#7\&D*3Y>I)8#45-HL(!F7+$)%7C9,$_YYL]EG='3BN9W[&9!$.<.U?E 
M#[email protected]%J/32)NAMI48M",_)0#JRR!*Y2P:[email protected])5/#UK!!3]*2M47V1GE 
M'X0(FN%_*3BX_X'(6X!ONLKN!U/&_ML-L:^FD/24Q)S*-D8)Z>F4Y^+$]\_' 
MB\$$;#D__S_RT(Y]MMK?B#%F1&C`>,)'7:12DX=F)T,/!*^(M*[,^N;6E4"; 
M31K\[email protected][@4L9MB.`1Z!`%@K5G)P<]0!?P\$RFUC/S:Y_Y\0*:\+$U+JEM%" 
M9E!+`0(>`PH``````(<!K$`````````````````$`[email protected]`````````$`#M00`` 
M``!F;V\O550%``.^CJU/[email protected]+``$$Z0,```3I`P``4$L!`AX#"@``````A`&L 
M0$EXM>H``@````(```<`&````````````*2!/@```&9O;R]B87)55`4``[B. 
MK4]U>`L``03I`P``!.D#``!02P$"'@,*``````"&`:Q`[email protected]\@`"`````@`` 
M!P`8````````````I(%_`@``9F]O+V)A>E54!0`#O(ZM3W5X"P`!!.D#```$ 
:Z0,``%!+!08``````P`#`.0```#`!``````` 
` 
end 
EOF 

# Unpack your zipfile 
unzip test.zip 
# Go into the created subdirectory and install 
cd foo 
python setup.py install 
# whatever post-install stuff you want goes here... 
cd .. 
rm -rf foo test.zip 
+0

Grazie per la risposta davvero dettagliata! – UsAaR33

0

py2app è la controparte Mac per py2exe, ma non so se è possibile eseguirlo da Ubuntu.

+1

Funziona solo su un Mac, quindi non funzionerà per il mio caso d'uso. – UsAaR33

5

Py2app, cx_freeze e py2exe servono per creare applicazioni indipendenti, non installatori.

È possibile utilizzare distutils Python per creare un file zip del pacchetto, e poi avvolgere il file zip in uno script che l'auto-estratti e installa il pacchetto, in questo modo: http://www.noah.org/wiki/Self-extracting_Python_Script

Oppure, se si vuole creare un programma di installazione che visualizza una GUI con una licenza click-through, quindi è necessario OS X PackageMaker per creare un file mpkg. Non penso che ci sia un equivalente Linux. Se vuoi provare a costruire un mpkg a mano, prova questa risposta: PackageMaker for creating Mac packages on Windows/Linux

+0

Dato che tu (@ UsAaR33) vuoi capacità postinst-like, la risposta di @ Craig è quella giusta. O vuoi creare un mpkg manualmente (l'altra risposta che ha collegato sembra molto promettente, e non proibitivamente difficile) o creare un binario autoestraente. Non mi piace la particolare zip autoestraente collegata qui per il tuo caso, dal momento che in realtà non si estrae, ma dovrebbe essere abbastanza evidente come la stessa formula di base possa essere usata per realizzare shell auto-estraente, auto-installante + conglomerati di tarball. Se vuoi la cordialità della GUI, però, è probabilmente una strada più difficile da percorrere. –

+0

Grazie @thepaul per il commento. Sto ancora sperando in una soluzione più semplice (facile come bdist_wininst), perché ho pensato che questo sarebbe stato un problema comune agli sviluppatori (nel mio caso lo rilasciamo molto frequentemente e vogliamo avere un semplice processo di generazione/rilascio basato su linux per gestire tutte le piattaforme). Detto questo, se nessuno fornisce una soluzione più facile prima della scadenza della bounty, accetterò la risposta di Craig - e andrò con una versione modificata dello zip autoestraente (preferirei non passare il tempo a creare un mio generatore di file BOM personale anche se l'installazione GUI è molto preferita). – UsAaR33

+0

Non credo che un analogo generale di bdist_wininst possa funzionare per te, dal momento che non credo ci sia alcuna funzione di distutils-ish per specificare azioni postinst. Qualcosa di simile py2app che funziona su * nix potrebbe esistere, però, se questo sarebbe soddisfare il requisito semplicità. Non sarebbe poi così difficile. Non penso sia stato ancora fatto. –

0

Hai problemi simili con cui ho sofferto.

Su mac. Scommetto che vuoi usare il pacchetto dmg invece del programma di installazione a meno che tu non abbia davvero bisogno di installare un driver o una sorta di DRM.

Quindi presumo solo che si desideri creare la directory .app e impacchettarla come file dmg in modo da poter distribuire facilmente l'applicazione.

Per creare una directory .app fuori dal codice Python, potresti voler usare Pyinstaller. Pro

  1. È Cross Platform.
  2. Funziona correttamente su mac, windows, linux
  3. È possibile controllare tutto sulla riga di comando.
  4. È ancora in fase di sviluppo.
  5. Impacchetta automaticamente le dipendenze richieste e non crea conflitti con Python installato sul computer locale.
  6. Buona documentazione.

Contro

  1. po 'di incoerenza tra nuova versione e la versione vecchia.

Costruire .app utilizzando Pyinstaller, qui è legato documento link

e costruire file DMG, è possibile utilizzare opzioni gratuite out there, ma per me, DMG Canvas era piuttosto utile.

Pro

  1. riga di comando di supporto
  2. supporto modello
  3. (Creare fondo abbastanza e cartelle utilizzando GUI e il riutilizzo sulla riga di comando)
  4. sostegno contratto di licenza

Contro

  1. Non libero

Per quanto ne so, non esiste una soluzione unificata da .py per compilare .app file e dmg o installer.

così si dovrebbe scrivere del codice per automatizzare esso, ma è piuttosto semplice, dal momento che entrambi supportano

riga di comando.

+0

Entrambi gli strumenti devono essere eseguiti su osx – UsAaR33

+0

@ UsAaR33 sì entrambi gli strumenti sicuramente funzionano su osx. –

+0

Sono confuso. La tua risposta è molto utile su come creare programmi di installazione di osx, ma la domanda riguardava la creazione di un programma di installazione osx su linux. – UsAaR33

Problemi correlati