2012-05-04 12 views
9

Distutils oferuje istniejące rozwiązania do budowy samorozpakowującego się pliku EXE systemu Windows. Warto zauważyć, że mogę stworzyć pakiet, nawet jeśli jestem na Ubuntu (co jest istotne z uwagi na nasz automatyczny proces tworzenia).Jakie są narzędzia do krzyżowego utworzenia instalatora OSX dla pakietu Pythona?

Jak zbudować instalator osx z komputera z systemem Ubuntu?

(To jest dla Pythona 2.7)

+0

Jakie są dokładnie twoje wymagania? Czy chcesz po prostu plik, który można kliknąć dwukrotnie, aby uruchomić instalator, czy wystarczy dystrybuować pakiet, który można zainstalować za pomocą komendy jednoliniowej, którą użytkownicy mogą kopiować i wklejać? A może chcesz rozpowszechniać swój pakiet w pliku .dmg, który wywołuje ładny instalator GUI? –

+0

Powinny być równie łatwe do zainstalowania ubuntu .deb lub Windows .exe. Ponadto mamy zależności (Setuptools), które chcemy sprawdzić i automatycznie zainstalować, jeśli nie są obecne. Instalowanie zależności odbywa się w .deb za pośrednictwem jawnej listy zależności i w .exe systemu Windows, określając skrypt instalacyjny przed instalacją bdist_wininst. Chcemy również mieć skrypt poinstalacyjny, który między innymi powiadamia użytkownika o powodzeniu/niepowodzeniu instalacji/kolejnych krokach. – UsAaR33

Odpowiedz

4

Możesz wykonać następujące czynności, ponieważ system OS X ma podstawę UNIX. (Zakładam, że ma również kilka standardowych narzędzi, takich jak uudecode i unzip.);

  • Utwórz plik zip dla swojego pakietu za pomocą standardowych narzędzi do pakowania w Pythonie, takich jak distutils.
  • Użyj pliku uuencode file.zip file.zip >uu.txt, aby przekonwertować ten plik zip na tekst.
  • Utwórz skrypt powłoki.
  • Umieść tekst wygenerowany przez uuencode jako here-document w tym skrypcie powłoki, który jest podawany do uudecode, aby odtworzyć plik zip. To powinno być drugie polecenie w skrypcie powłoki. Pierwsze polecenia powinny sprawdzić potrzebne narzędzia.
  • Użyj dowolnego narzędzia do konfiguracji Pythona, aby zainstalować plik zip.
  • Wykonuj dowolne poinstalacyjne rzeczy, które chcesz.
  • Usuń plik zip.

Aby zainstalować program, uruchom skrypt powłoki. W systemie UNIX ten skrypt powinien działać jako root. Nie wiem jednak, jak OS X sobie z tym poradzi. Poniżej znajduje się przykład (załączony plik zip zawiera dwa pliki z przypadkowym szumem);

#!/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

Dzięki za naprawdę szczegółową odpowiedź! – UsAaR33

0

py2app jest odpowiednikiem Mac do py2exe, ale nie wiem, czy można go uruchomić z Ubuntu.

+1

Działa tylko na komputerach Mac, więc nie będzie działać dla mojego przypadku użycia. – UsAaR33

5

Py2app, cx_freeze i py2exe służą do tworzenia samodzielnych aplikacji, a nie instalatorów.

Można użyć distutils Pythona utworzyć plik zip z pakietu, a następnie owinąć plik zip w skrypcie, że samo-ekstrakty i instaluje pakiet, na przykład: http://www.noah.org/wiki/Self-extracting_Python_Script

Albo, jeśli chcesz utwórz instalator, który wyświetla graficzny interfejs użytkownika z licencją click-through, a następnie potrzebujesz OS X PackageMaker do utworzenia pliku mpkg. Nie sądzę, że istnieje odpowiednik Linuksa. Jeśli chcesz spróbować budować mpkg ręcznie, spróbuj odpowiedzieć na to pytanie: PackageMaker for creating Mac packages on Windows/Linux

+0

Ponieważ ty (@ UsAaR33) potrzebujesz funkcji podobnej do postinst, odpowiedź @ Craiga jest właściwa. Chciałbyś zrobić mpkg ręcznie (druga odpowiedź, którą łączy, wygląda bardzo obiecująco i nie jest zbyt trudna) lub utworzyć samorozpakowującą się wersję binarną. Nie podoba mi się konkretny samorozpakowujący się zip dla twojej sprawy, ponieważ tak naprawdę nie wyodrębnia się, ale powinno być całkiem oczywiste, jak ta sama podstawowa formuła może być użyta do samorozpakowującego się, samoinstalującego się powłoki + konglomeracje tarball. Jeśli jednak zależy Ci na przyjazności dla GUI, prawdopodobnie jest to trudniejsza droga. –

+0

@thepaul Dzięki za komentarz. Nadal mam nadzieję na łatwiejsze rozwiązanie (tak łatwe, jak bdist_wininst), ponieważ uznałem, że jest to typowy problem, z którym mają do czynienia deweloperzy (w moim przypadku bardzo często publikujemy i chcemy mieć prosty proces kompilacji/wydania oparty na Linuksie do obsługi wszystkie platformy). To powiedziawszy, jeśli nikt nie zapewnia łatwiejszego rozwiązania przed wygaśnięciem nagród, przyjmuję odpowiedź Craiga - i idę ze zmodyfikowaną formą samorozpakowującego się zipa (wolałbym nie spędzać czasu na budowaniu mojego własnego generatora plików BOM mimo że instalacja GUI jest bardzo preferowana). – UsAaR33

+0

Nie sądzę, aby ogólny analog z bdist_wininst zadziałałby dla ciebie, ponieważ nie wierzę, że istnieje jakaś usługa distutils-ach do określania działań postinst. Może jednak istnieć coś w stylu py2app działającego na * nix, jeśli spełni to wymaganie łatwości. Nie byłoby tak trudne. Po prostu nie sądzę, że to już zostało zrobione. –

0

pyinstaller może tworzyć pliki wykonywalne OSX, ale użyłem go tylko na OSX siebie, więc nie wiem, czy to działa z Ubuntu.

dowiedziałem o tym programie czytanie dokumentacji dla kivy tutaj: http://kivy.org/docs/guide/packaging-macosx.html

Mam nadzieję, że trochę tego jest bardzo pomocna.

+0

Najczęściej zadawane pytania mówi, że nie może tworzyć plików binarnych OSX (lub Windows) na Linuksie. – UsAaR33

+0

Ok. Przepraszam, że nie sprawdzam. – thundersteele

0

Masz podobne kłopoty, z którymi cierpiałem.

Na komputerze Mac. Założę się, że chcesz użyć pakietu dmg zamiast Instalatora, chyba że naprawdę potrzebujesz zainstalować sterownik lub jakiś DRM.

Założę się, że chcesz utworzyć katalog .app i zapakować go jako plik dmg, abyś mógł łatwo dystrybuować swoją aplikację.

Aby zbudować katalog .app z kodu Pythona, możesz użyć Pyinstaller. Zalety

  1. To platforma krzyżowa.
  2. Działa dobrze na Mac, Windows, Linuksie
  3. Możesz kontrolować wszystko w linii poleceń.
  4. Ciągle się rozwija.
  5. Pakuje wymagane zależności automatycznie i nie powoduje konfliktu z zainstalowanym językiem lokalnym na komputerze Python.
  6. Dobra dokumentacja.

Wady

  1. trochę niespójności pomiędzy nowej wersji i starej wersji.

Aby zbudować .app użyciu Pyinstaller, oto związane dokument link

i zbudować plik DMG, można bezpłatnie korzystać z opcji out there, ale dla mnie, DMG Canvas było całkiem użyteczne.

Plusy

  1. linii poleceń wsparcie
  2. szablon
  3. wsparcie (Utwórz ładny tła i foldery za pomocą GUI i używać go w linii poleceń)
  4. wsparcie umowy licencyjnej

Cons

  1. Not Free

O ile mi wiadomo, nie ma zunifikowanego rozwiązania z .py do kompilacji pliku .app i do dmg lub instalatora.

Więc należy napisać kod, aby go zautomatyzować, ale jest to dość proste, ponieważ oba obsługują

linii poleceń.

+0

Oba narzędzia muszą być uruchomione na osxie – UsAaR33

+0

@ UsAaR33 tak oba narzędzia z pewnością działają na osx. –

+0

Jestem zdezorientowany. Twoja odpowiedź jest bardzo przydatna w tworzeniu instalatorów osx, ale pytanie dotyczyło budowy instalatora osx na Linuksie. – UsAaR33

Powiązane problemy