2009-10-13 9 views
75

Đơn đăng ký của tôi có dạng như sau:Làm cách nào để phân phối chương trình python?

 
main.py 
windows/ 
    __init__.py 
    mainwindow.py 
    ... 
model/ 
    __init__.py 
    orders.py 
    ... 
resources/ 
    image1.png 
    logo.jpg 
    ... 

Chương trình được bắt đầu với main.py. Có cách nào tốt để tạo ra một ứng dụng 'cuối cùng' ra khỏi nó? Tôi đang nghĩ về một cái gì đó giống như py2exe/py2app, nhưng mà không cần sao chép các thông dịch viên/mô-đun python vào ứng dụng mà một trong những chỉ có một thực thi.

tôi đã có một cái nhìn tại distutils, nhưng điều này có vẻ như nó cài đặt một chương trình vào thư mục Python, mà không phải là bình thường trên nền tảng không phải Linux.

Tại thời điểm này tôi chỉ cần sao chép thư mục nguồn toàn bộ vào máy mục tiêu và tạo ra một bí danh để main.pyw trên cửa sổ. Một số sự bất tiện:

  • Biểu tượng là biểu tượng trăn mặc định.
  • Tôi phải tạo bí danh theo cách thủ công.
  • Trong thư mục nguồn của tôi có rất nhiều tệp bổ sung như thư mục kiểm soát nguồn.
  • Tôi phải đổi tên main.py thành main.pyw theo cách thủ công.
  • Sẽ thật tuyệt nếu chỉ có các tệp `.pyo * trên máy đích. Không có lý do thực sự cho nó, tôi chỉ không thích có các tập tin không cần thiết.

Làm sao người ta tạo ra một phân phối tự động thoải mái?

  • cho cửa sổ? (Đó là nền tảng duy nhất mà tôi phải hỗ trợ tại thời điểm này.)
  • cho mac?
  • cho Linux?
+2

"Tôi đã có một cái nhìn tại distutils, nhưng điều này có vẻ như nó cài đặt một chương trình vào thư mục Python, mà không phải là bình thường trên nền tảng không phải linux ." Sao anh lại nói vậy? Bạn đã đọc văn bản gì? Nó chắc chắn là không đúng sự thật, bạn đã có ấn tượng đó ở đâu? –

+0

Bản sao có thể có của [Phân phối các chương trình được viết bằng Python] (http://stackoverflow.com/questions/4190635/distributing-programs-written-in-python) – SebasSBM

Trả lời

29

Cách phân phối bình thường các ứng dụng Python là distutils. Nó được tạo ra cho cả việc phân phối các mô-đun python kiểu thư viện và các ứng dụng python, mặc dù tôi không biết nó hoạt động như thế nào trên Windows. Bạn sẽ có trên Windows phải cài đặt Python một cách riêng biệt nếu bạn sử dụng các distutils, trong mọi trường hợp.

tôi có lẽ muốn khuyên bạn nên phân phối nó với disutils cho Linux, và py2exe hoặc một cái gì đó tương tự cho Windows. Đối với OS X tôi không biết. Nếu đó là một ứng dụng người dùng cuối, bạn có thể muốn một loại hình ảnh đĩa của điều, tôi không biết làm thế nào để làm điều đó. Nhưng hãy đọc this post để biết thêm thông tin về trải nghiệm người dùng của nó. Đối với một ứng dụng được tạo cho các lập trình viên, có lẽ bạn cũng có thể cài đặt loại distutils trên OS X.

+1

Mac và linux không phải là điều quan trọng vào lúc này. Py2app tạo các gói ứng dụng .app. Và tôi nghĩ rằng việc vận chuyển các ứng dụng mac trong .dmg đã lỗi thời, bạn nên sử dụng .zip. Có thể sử dụng các distutils để tạo một thư mục 'dist' và sao chép tất cả các file liên quan vào đó? –

+1

@gs: lệnh sdist sẽ tạo tệp tar của tất cả các tệp nguồn. –

+4

@gs: Giao diện ứng dụng Mac trong .dmg thực sự rất phổ biến. .dmg là hình ảnh đĩa và không phải định dạng cho các ứng dụng (có thể là .app). Vì vậy, bạn thường tìm thấy một đơn .app bên trong một .dmg, cùng với một số tệp README. – EOL

1

Nếu bạn đang phân phối trên cửa sổ, sử dụng một installer để cài đặt tất cả các file liên quan/interpeter bất cứ điều gì là cần thiết. Phân phối một setup.exe. Đó là cách tốt nhất trên cửa sổ. Nếu không, người dùng sẽ phàn nàn.

+1

Tôi không cần trình cài đặt vì chỉ có một người dùng sẽ sử dụng chương trình. Nhưng tất nhiên khi viết một chương trình cho nhiều người dùng hơn là một-phải có trên cửa sổ. –

+1

@gs: Ồ, chỉ một người dùng. Tốt, sau đó tôi sẽ khuyên bạn nên thực hiện một gói distutils cơ bản, hoặc là một nguồn phân phối hoặc một cửa sổ cài đặt nhị phân. Đó chắc chắn là một cách dễ dàng và tốt đẹp để phân phối một mô-đun Python. –

47

Tôi khuyên bạn nên Pyinstaller, hỗ trợ tất cả các nền tảng chính khá liền mạch. Giống như py2exe và py2app, nó tạo ra một tập tin thực thi chuẩn trên Windows và một gói ứng dụng trên OS X, nhưng cũng có lợi ích của việc tự động giải quyết các phụ thuộc phổ biến và bao gồm chúng mà không cần chỉnh sửa cấu hình bổ sung.

Cũng lưu ý rằng nếu bạn đang triển khai Python 2.6 lên Windows, bạn nên áp dụng this patch vào thân Pyinstaller.

Bạn đã chỉ ra rằng bạn không cần trình cài đặt, nhưng Inno Setup là dễ sử dụng và nhanh chóng thiết lập lựa chọn cho nền tảng Windows.

+0

Quá mức cần thiết cho trường hợp này, vì anh ta chỉ có một người dùng, nhưng đề xuất tốt thường là một phần mềm tôi quên tồn tại. +1 –

+3

Tôi không chắc rằng nó quá mức cần thiết. Việc gộp một ứng dụng với Pyinstaller thực sự có thể dễ dàng hơn các phương thức khác, đặc biệt là những người có phụ thuộc vào c extensions ... đơn giản như một lệnh gọi dòng lệnh trong hầu hết các trường hợp. Cài đặt Python + dependencies + bản thân ứng dụng (cho dù thông qua distutils, etc, hay chỉ là một file zip) có liên quan nhiều hơn, đặc biệt nếu nhà phát triển không thể tự cấu hình máy đích và cần cung cấp hướng dẫn cho máy khách. Ít nhất là trên Windows, tôi nghĩ rằng kiểu phân phối có ý nghĩa. –

+1

Một chút bất tiện với pyinstaller, khi bạn sử dụng tệp thực thi được tạo bằng pyinstaller, bắt đầu thực hiện mất một vài giây. – JuanPablo

5

Số squeeze.py của Fredrik Lundh có thể tạo một tệp duy nhất không chứa trình thông dịch Python, nhưng thay vào đó chứa bytecode. Với các đối số đúng, bạn có thể bao gồm các tệp, mô-đun khác, v.v. trong tệp kết quả. Tôi đã sử dụng nó thành công trong một dự án. Chương trình kết quả chạy trên OS X, Linux và Windows mà không có bất kỳ vấn đề gì!

PS: Mỗi máy cần có trình thông dịch Python tương thích với mã byte được tạo bởi squeeze.py. Bạn có thể tạo ra các phiên bản bytecode khác nhau cho các phiên bản Python khác nhau, nếu cần (chỉ cần chạy squeeze.py với phiên bản Python đúng).

+0

Trông rất hứa hẹn, tôi sẽ xem xét nó. –

2

Tôi có thể bị nhầm lẫn, nhưng IronPython có trình biên dịch tích hợp cho cửa sổ không?

http://www.ironpython.net

[EDIT]

Thử Cx_Freeze, Bởi đến nay py tốt nhất để exe (cộng với một vài dlls) trình biên dịch mà tôi từng sử dụng.

http://cx-freeze.sourceforge.net/