2012-09-27 22 views
15

Tôi đã dành 3 giờ đồng hồ để tìm hiểu xem có thể vô hiệu hóa hoặc xây dựng Python mà không có chế độ tương tác hay không.Tối ưu hóa kích thước của trình thông dịch Python nhúng

Như bạn có thể đoán nó cho một thiết bị nhúng và sau khi biên dịch chéo Python là khoảng 1MB lớn và đó là quá nhiều đối với tôi.

Bây giờ, đặt câu hỏi:

Có khả năng thu nhỏ tệp thực thi Python không? Có thể vô hiệu hóa chế độ tương tác (bắt đầu chương trình Python trên dòng lệnh).

Tôi đã tìm các tùy chọn cấu hình và đã thử một số tùy chọn nhưng không tạo ra bất kỳ thay đổi nào đối với tệp thực thi của tôi.

Tôi biên dịch nó với các tùy chọn được tối ưu hóa từ gcc và nó đã bị loại bỏ.

+0

Xem này [SO câu hỏi] (http://stackoverflow.com/questions/240996/anyone-using-python-for-embedded-projects?rq=1) cho chạy trong 16MB RAM – Mark

+0

tôi đã đọc nó nhưng vấn đề là tinypy không được cập nhật từ năm 2008! Và đối với tinypy nó không thể sử dụng tất cả các thư viện hoặc không dễ sử dụng! Quá nhiều công việc cho mỗi thư viện. Mục tiêu không thể xảy ra mà python có kích thước nhỏ hơn 500kb – Benny

+1

Nhiều năm trước, tôi đã ở một công ty sử dụng phần cứng nhúng và sau khi thử nhiều trình thông dịch khác nhau, chúng tôi quyết định một Forth được nhúng. Các tệp thực thi nhỏ hơn nhị phân gốc, tôi không cho bạn. –

Trả lời

2

Có thể có những cách bạn có thể nhồi nhét nó xuống một chút nữa chỉ bằng cách định cấu hình, nhưng không nhiều hơn nữa.

Ngoài ra, mã chế độ tương tác thực tế là khá tầm thường, vì vậy tôi nghi ngờ bạn sẽ tiết kiệm được nhiều ở đó.

Tôi chắc rằng có nhiều tính năng đáng kể hơn mà bạn không sử dụng mà bạn có thể hack ra khỏi thông dịch viên để giảm kích thước. Ví dụ, bạn có thể ném ra một đoạn lớn của trình phân tích cú pháp và trình biên dịch và chỉ xử lý không có gì ngoài bytecode. Vấn đề là cách duy nhất để làm điều đó là hack nguồn thông dịch. (Và nó không phải là mã đẹp nhất trên thế giới, vì vậy bạn sẽ phải dành một số lượng thời gian để học theo cách của bạn.) Và bạn sẽ phải biết những tính năng bạn thực sự có thể hack ra.

Cách thay thế thực sự duy nhất khác là viết một trình thông dịch nhỏ hơn cho ngôn ngữ giống như Python — ví dụ: bằng cách chọn dự án nhỏ xíu. Nhưng từ ý kiến ​​của bạn, nó không có vẻ như là "giống như Python" là đủ cho bạn trừ khi nó rất gần.

Vâng, tôi cho rằng có một giải pháp thay thế khác: Hack một triển khai Python khác, đẹp hơn CPython. Vấn đề là Jython và IronPython không phải là mã nguồn gốc (mặc dù có thể bạn có thể sử dụng trình biên dịch JVM-> bản địa, hoặc có thể nhồi nhét Jython vào một J2ME JVM?), Và PyPy thực sự chưa sẵn sàng cho thời gian chính trên nhúng hệ thống. (Bạn có thể chờ đợi một vài năm?) Vì vậy, bạn có thể bị mắc kẹt với CPython.

+2

+1 với các câu lệnh trên. Có Python phù hợp với 1Mb đã là một thành tích khá. Nếu không gian rất chặt chẽ trên thiết bị nhúng, tôi sẽ xem xét các lựa chọn thay thế nhỏ hơn, như lua (tuyên bố phù hợp với ít hơn 500kb) –

+0

Thx các bạn để được giúp đỡ nhanh chóng và tất nhiên cho việc chỉnh sửa tiếng anh của tôi! Tôi nghĩ bây giờ chúng ta hãy để Pyhton có kích thước này và có thể xây dựng nó trong phần cứng tương lai của chúng ta khi chúng ta có nhiều không gian flash hơn. THX cho tất cả – Benny

+1

PyPy rất có thể sẽ không bao giờ sẵn sàng sử dụng trong các môi trường hạn chế như vậy. Sự trừu tượng bổ sung chắc chắn thêm vào kích thước và trình biên dịch JIT được nhúng trong tệp thực thi không giúp được gì. – fijal

5

Nếu bạn reallly muốn co python, bạn có thể có một cái nhìn vào những dự án:

http://code.google.com/p/python-on-a-chip/

như đã nói trên trang web:

Python-on-a-chip (p14p) là một dự án để phát triển một máy ảo Python được rút gọn (có tên mã là PyMite) chạy một bộ con quan trọng của ngôn ngữ Python trên vi điều khiển không có hệ điều hành. các phần khác của p14p là trình điều khiển thiết bị, thư viện cấp cao và các công cụ khác. Vui lòng tham gia nhóm google python-on-a-chip để thảo luận về dự án này.

Đây có thể là một mức độ ít thấp hơn dự kiến, nhưng nó thực sự là co:

Đặc điểm của PyMite VM:

  • Yêu cầu khoảng 55 KB bộ nhớ chương trình
  • khởi trong 4KB RAM; in "hello world" cần 5KB; 8KB là RAM tối thiểu được khuyến nghị.
  • Hỗ trợ số nguyên, phao nổi, các bộ, danh sách, dicts, chức năng, module, các lớp học, máy phát điện, trang trí và đóng cửa
  • Hỗ trợ 25 trong số 29 từ khóa và 89 của 112 bytecode từ Python 2,6

Bạn có thể nhận ý tưởng thú vị từ dự án này.

Hãy coi chừng bạn chỉ nhận được máy ảo, tức là. bạn có thể chạy các tập tin pyc, không phải py. Tuy nhiên, nhỏ hơn nhiều so với các file py)

Thực tế, nếu bạn thực sự nhắm vào con trăn nhỏ nhất, bạn cần vô hiệu hóa các phần của thư viện, nhưng cũng có thể là trình biên dịch.

Trang web này có thể có con trỏ thú vị cũng: http://www.awaretek.com/pymo.html

+0

+1. Rất thú vị. Nó trông giống như một ngôn ngữ giống như Python trong phòng sạch chứ không phải là một hack của CPython (GC quét mark, stackless, không có phần mở rộng C, vv). Tôi nghĩ rằng tôi đề nghị rằng sẽ là quá nhiều công việc cho dự án của OP để làm từ đầu, nhưng để xây dựng trên PyMite có thể là một dự án hoàn toàn hợp lý. Nó có thể phụ thuộc vào bao nhiêu chức năng stdlib mà OP cần. – abarnert

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