2012-01-27 5 views
13

py2exe là tuyệt vời và tôi sử dụng nó bất cứ khi nào tôi muốn đóng gói chương trình python để chạy trên hệ thống Windows.Thay thế đa nền tảng cho py2exe

Câu hỏi của tôi là, có một công cụ tương đương mà tôi có thể sử dụng để đóng gói chương trình trên Windows, nhưng sau đó tôi có thể chạy trên Linux không?

+0

Bạn có thể giả định rằng python đã được cài đặt trên hầu hết các hệ thống Linux. – ThiefMaster

+2

Có, nhưng tôi vẫn muốn dễ dàng đóng gói tất cả các tệp nguồn có liên quan bao gồm mọi mô-đun đã nhập, mà không cần cài đặt nội dung trên hệ thống Linux mục tiêu. – xorsyst

Trả lời

1

Ok, tôi đã thực hiện việc này. Đó là một chút hacky, nhưng nó hoạt động rất tốt cho trường hợp sử dụng của tôi.

Ý chính của nó là sử dụng ModuleFinder để tìm tất cả các mô-đun đã nhập, lọc ra bất kỳ hệ thống nào, biên dịch chúng và nén chúng lên.

Đáng tiếc là mã của tôi cho điều này là rải rác với các biến chứng bổ sung mà không có bất kỳ liên quan đến câu hỏi này, vì vậy tôi không thể dán một chương trình làm việc, chỉ cần một số đoạn:

zipfile = ZipFile(os.path.join(dest_dir, zip_name), 'w', ZIP_DEFLATED) 
sys.path.insert(0, '.') 
finder = ModuleFinder() 
finder.run_script(source_name) 

for name, mod in finder.modules.iteritems(): 
    filename = mod.__file__ 
    if filename is None: 
     continue 
    if "python" in filename.lower(): 
     continue 

    subprocess.call('"%s" -OO -m py_compile "%s"' % (python_exe, filename)) 

    zipfile.write(filename, dest_path) 
6

đây cũng là PyInstaller hỗ trợ Linux, MacOS và Windows - Tôi chưa sử dụng nó (chưa) vì vậy tôi không biết liệu bạn có thể gói nội dung trên cửa sổ cho Linux hay không, nhưng có thể xem qua manual .

EDIT: Các FAQ bang một cách rõ ràng rằng bạn không thể tạo ra một gói phần mềm cửa sổ từ Linux và không có gói mac os từ linux không - không có gì về việc tạo ra một gói linux từ hai nguồn khác, nhưng nó có thể không công việc.

EDIT2: Sau khi tìm kiếm một chút, tôi đã tìm thấy cx_freeze cũng có thể đáng xem.

+0

Ý tưởng thú vị, nhưng tôi đã không quản lý để có được một trong hai để làm việc. Tuy vậy vẫn cảm ơn về những gợi ý. – xorsyst

5

Tôi thực sự nghi ngờ rằng bạn có thể làm điều gì đó tương tự như vậy.

Những gì bạn có thể làm là chỉ cấu hình 3 máy ảo xây dựng cho Windows, một cho MacOS và một cho Linux có mọi thứ bạn cần để chạy chương trình của mình.

Sau đó sử dụng kết hợp py2exe/py2app/pyinstaller để tạo phân phối cho từng nền tảng. Bạn sẽ có 3 pacakges khác nhau nhưng mỗi một trong số họ sẽ được đóng gói độc đáo và không cần phải cài đặt bất cứ điều gì khác trên các máy khách.