2012-05-04 10 views
9

Distutils cung cấp các giải pháp hiện có để xây dựng một Windows EXE tự giải nén. Đáng chú ý, tôi có thể tạo ra các gói ngay cả khi tôi đang trên Ubuntu (đó là điều cần thiết cho quá trình xây dựng tự động của chúng tôi).Có những công cụ gì để tạo một trình cài đặt OSX cho gói python?

Làm cách nào để tạo trình cài đặt OSX từ máy Ubuntu?

(Điều này là dành cho python 2,7)

+0

Chính xác yêu cầu của bạn là gì? Bạn chỉ muốn một tập tin có thể được nhấn đúp để khởi chạy trình cài đặt, hoặc nó sẽ là đủ để phân phối một gói có thể được cài đặt với lệnh một dòng mà người dùng có thể sao chép + dán không? Hoặc bạn có muốn phân phối gói của mình bên trong tệp .dmg để gọi trình cài đặt GUI tốt không? –

+0

Nó sẽ dễ dàng cài đặt một ubuntu .deb hoặc một cửa sổ .exe. Chúng tôi cũng có phụ thuộc (Setuptools), chúng tôi muốn kiểm tra và tự động cài đặt nếu chúng không có mặt. Cài đặt phụ thuộc được thực hiện trong .deb thông qua danh sách phụ thuộc rõ ràng và trong cửa sổ .exe bằng cách chỉ định tập lệnh cài đặt sẵn cho bdist_wininst. Chúng tôi cũng muốn có một kịch bản sau khi cài đặt, trong số những thứ khác thông báo cho người dùng về cài đặt thành công/thất bại/các bước tiếp theo. – UsAaR33

Trả lời

4

Bạn có thể làm như sau, vì OS X có nền tảng UNIX. (Tôi giả sử nó cũng có một số tiện ích tiêu chuẩn như uudecodeunzip.);

  • Tạo tệp zip cho gói của bạn bằng các công cụ đóng gói chuẩn của Python, như các dấu rãnh.
  • Sử dụng uuencode file.zip file.zip >uu.txt để chuyển đổi tệp zip này thành văn bản.
  • Tạo tập lệnh shell.
  • Đặt văn bản được tạo bởi uuencode dưới dạng here-document trong tập lệnh shell đó, được cấp cho uudecode, để tạo lại tệp zip. Đây sẽ là lệnh thứ hai trong shell-script. Các lệnh đầu tiên nên kiểm tra các tiện ích cần thiết.
  • Sử dụng bất kỳ công cụ thiết lập Python nào mà bạn phải cài đặt tệp zipfile.
  • Thực hiện bất kỳ nội dung nào sau khi cài đặt mà bạn muốn.
  • Xóa tệp zip.

Để cài đặt chương trình, hãy chạy tập lệnh shell. Trên UNIX, tập lệnh này sẽ được chạy dưới dạng root. Tuy nhiên, không biết OS X xử lý điều đó như thế nào. Dưới đây là một ví dụ (tệp zip kèm theo chứa hai tệp chỉ có nhiễu ngẫu nhiên);

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

Cảm ơn câu trả lời thực sự chi tiết! – UsAaR33

0

py2app là đối tác Mac để py2exe, nhưng tôi không biết nếu bạn có thể chạy nó từ Ubuntu.

+1

Nó chỉ chạy trên máy Mac vì vậy sẽ không hoạt động đối với trường hợp sử dụng của tôi. – UsAaR33

5

Py2app, cx_freeze và py2exe là để tạo các ứng dụng độc lập, không phải trình cài đặt.

Bạn có thể sử dụng distutils Python để tạo ra một tập tin zip của gói của bạn, và sau đó quấn file zip trong một kịch bản mà tự chiết xuất và cài đặt các gói phần mềm, như thế này: http://www.noah.org/wiki/Self-extracting_Python_Script

Hoặc, nếu bạn muốn tạo trình cài đặt hiển thị GUI với giấy phép nhấp qua, sau đó bạn cần OS X PackageMaker để tạo tệp mpkg. Tôi không nghĩ rằng có một tương đương với Linux. Nếu bạn muốn thử xây dựng một mpkg bằng tay, hãy thử câu trả lời này: PackageMaker for creating Mac packages on Windows/Linux

+0

Vì bạn (@ UsAaR33) muốn có khả năng giống như đăng bài, câu trả lời của @ Craig là câu trả lời đúng. Bạn muốn hoặc muốn tạo một mpkg bằng tay (câu trả lời khác mà anh ta liên kết trông rất hứa hẹn, và không phải là cực kỳ khó) hoặc tạo ra một nhị phân tự giải nén. Tôi không thích zip tự giải nén được liên kết ở đây cho trường hợp của bạn, vì nó không thực sự trích xuất, nhưng rõ ràng là công thức cơ bản giống nhau có thể được sử dụng như thế nào để tự giải nén, tự cài đặt shell + các tập đoàn tarball. Tuy nhiên, nếu bạn muốn có sự thân thiện với GUI, thì đó có thể là một cách khó khăn hơn. –

+0

@thepaul Cảm ơn bạn đã bình luận. Tôi vẫn hy vọng cho một giải pháp dễ dàng hơn (dễ như bdist_wininst), như tôi đã thấy đây là một vấn đề phổ biến mà các nhà phát triển gặp phải (trong trường hợp của chúng tôi, chúng tôi phát hành rất thường xuyên và muốn có một quá trình xây dựng/phát hành dựa trên Linux đơn giản để xử lý tất cả các nền tảng). Điều đó nói rằng nếu không ai cung cấp một giải pháp dễ dàng hơn trước khi tiền thưởng hết hạn, tôi sẽ chấp nhận câu trả lời của Craig - và đi với một hình thức sửa đổi của zip tự giải nén (Tôi không muốn dành thời gian xây dựng một máy phát tập tin BOM của riêng tôi mặc dù cài đặt GUI được ưa thích nhiều). – UsAaR33

+0

Tôi không nghĩ rằng một tương tự chung của bdist_wininst sẽ làm việc cho bạn, mặc dù, vì tôi không tin rằng có bất kỳ cơ sở distutils-ish để xác định hành động postinst. Một cái gì đó giống như py2app mà hoạt động trên * nix có thể tồn tại, mặc dù, nếu điều đó sẽ đáp ứng yêu cầu easiness. Sẽ không phải là tất cả những khó khăn. Tôi chỉ không nghĩ rằng nó đã được thực hiện được nêu ra. –

0

pyinstaller có thể tạo ra thực thi OSX, nhưng tôi đã chỉ được sử dụng nó trên OSX bản thân mình, vì vậy tôi không biết nếu nó hoạt động từ Ubuntu.

tôi đã học về chương trình này đọc tài liệu cho kivy, ở đây: http://kivy.org/docs/guide/packaging-macosx.html

Tôi hy vọng một số trong số này là hữu ích.

+0

Các câu hỏi thường gặp nói rằng nó không thể tạo các tệp nhị phân OSX (hoặc windows) trên Linux. – UsAaR33

+0

Ok. Xin lỗi vì không kiểm tra. – thundersteele

0

Bạn gặp sự cố tương tự mà tôi đã gặp phải.

Trên máy Mac. Tôi đặt cược bạn muốn sử dụng gói dmg thay vì cài đặt trừ khi bạn thực sự cần phải cài đặt trình điều khiển hoặc một số loại DRM.

Vì vậy, tôi sẽ chỉ giả định rằng bạn muốn tạo thư mục .app và đóng gói nó dưới dạng tệp dmg để bạn có thể phân phối ứng dụng của mình dễ dàng.

Để tạo thư mục .app trong mã python, bạn có thể muốn sử dụng Pyinstaller. Ưu tiên

  1. Đó là nền tảng chéo.
  2. Hoạt động tốt trên mac, cửa sổ, linux
  3. Bạn có thể kiểm soát mọi thứ trên dòng lệnh.
  4. Nó vẫn đang tích cực phát triển.
  5. Gói tự động yêu cầu phụ thuộc và không tạo xung đột với Python được cài đặt trên máy cục bộ.
  6. Tài liệu tốt.

Nhược điểm

  1. chút mâu thuẫn giữa phiên bản mới và phiên bản cũ.

Xây dựng .app sử dụng PyInstaller, đây có liên quan tài liệu link

và xây dựng dmg file, bạn có thể sử dụng tùy chọn miễn phí out there, nhưng đối với tôi, DMG Canvas là khá hữu ích.

Ưu

  1. dòng lệnh hỗ trợ
  2. hỗ trợ template (Tạo nền và thư mục sử dụng giao diện đồ họa đẹp và tái sử dụng nó trên dòng lệnh)
  3. hỗ trợ thỏa thuận cấp phép

Nhược điểm

  1. Không miễn phí

Theo như tôi biết, không có giải pháp thống nhất nào từ .py để tạo tệp .app và dmg hoặc trình cài đặt.

Vì vậy, bạn nên viết một số mã để tự động hóa, nhưng nó khá thẳng về phía trước vì cả hai đều hỗ trợ

Dòng lệnh.

+0

Cả hai công cụ phải được chạy trên osx – UsAaR33

+0

@ UsAaR33 có cả hai công cụ chắc chắn chạy trên OSX. –

+0

Tôi đang bối rối. Câu trả lời của bạn là rất hữu ích về cách làm cho trình cài đặt osx, nhưng câu hỏi là liên quan đến việc xây dựng một trình cài đặt OSX trên Linux. – UsAaR33