2011-01-14 36 views
5

Tôi có một tình huống lạ khi tôi cần tải tệp nguồn Python lên máy chủ kiểm tra để đánh giá, nhưng tôi muốn giữ ứng dụng của mình được sắp xếp thành nhiều tệp/mô-đun/gói. Rất tiếc, máy chủ thử nghiệm nằm ngoài tầm kiểm soát của tôi, vì vậy tôi không thể sửa đổi nó để cho phép tôi tải lên tệp ZIP chứa mã của tôi.Nén một ứng dụng Python vào một tệp nguồn đơn

Có cách nào dễ dàng để lấy một số lượng lớn các tệp nguồn Python bao gồm một ứng dụng và tự động giảm chúng vào một tệp nguồn duy nhất (hoặc tệp .pyc) không? Để đơn giản, chỉ một tệp sẽ được coi là "điểm vào" và có if __name__ == '__main__'. Tệp cuối cùng vẫn cần được thực thi bởi trình thông dịch Python, vì vậy tôi không thể sử dụng trình tạo Python-to-EXE.

Trả lời

4

Nếu bạn không thể tải lên tệp zip, có lẽ bạn có thể làm theo một số đề xuất có chứa here. Ý tưởng là tạo và tải lên tệp tập lệnh có chứa một dòng shebang Python (được bỏ qua bởi trình thông dịch) được thêm vào kho lưu trữ tệp zip. Sau đó, bạn có thể cho phép trình thông dịch Python đọc tệp zip trực tiếp hoặc bạn thực thi nó từ một trình bao. Để thực hiện công việc này, bạn cần sử dụng ít nhất Python 2.6.

zip testapp.zip * 
echo '#!/usr/bin/env python' | cat - testapp.zip > testapp.py 
chmod 755 testapp.py 

Để thực hiện một trong hai:

python testapp.py 

hay:

./testapp.py 

Như đã thảo luận trong bài viết trên blog, tùy thuộc vào những gì các phiên bản là Python bạn cần hỗ trợ và những tính năng bạn cần, có nhiều điều chỉnh khác nhau mà bạn có thể cần thực hiện với bố cục nguồn của mình để bao gồm các tệp __main__.py cần thiết và các tệp __init__.py để tạo một gói thích hợp và để cre ăn __main__.py được liên kết với nhau bên ngoài thư mục gói chính. Đó là một chút của một kludge nhưng, một khi bạn nhận được nó làm việc, nó sẽ được dễ dàng để tự động hóa, giả sử máy chủ thử nghiệm của bạn có thể xử lý như một tập tin văn bản giả. Thông tin chi tiết quan trọng ở đây là bản thân trình thông dịch Python đang đọc và giải nén kho lưu trữ zip, không phải là một chương trình bên ngoài.

Nếu máy chủ thử nghiệm có thể xử lý tập lệnh shell POSIX chuẩn, một tùy chọn khác có thể là tạo tập lệnh bao bọc mọi thứ thành tập hợp các tệp tại đây trong một tập lệnh lớn.

+0

1 mẹo rất hay, tôi không biết điều đó là có thể. – plundra

+0

Rất trơn. Tuy nhiên, liên kết của bạn dường như bị hỏng. Bài viết đó vẫn còn xung quanh? – Cerin

+0

Rất tiếc, dấu "l' bị thiếu, hiện đã được sửa. –

Các vấn đề liên quan