Tôi tự hỏi liệu có thể tạo ra một mô-đun thực thi từ một tập lệnh Python hay không. Tôi cần có hiệu suất cao nhất và tính linh hoạt của tập lệnh Python, mà không cần chạy trong môi trường Python. Tôi sẽ sử dụng mã này để tải các mô-đun người dùng theo yêu cầu để tùy chỉnh ứng dụng của tôi.Có thể biên dịch Python nguyên bản (ngoài mã byte pyc) không?
Trả lời
- Có pyrex rằng biên dịch python như nguồn để các module mở rộng python
- rpython cho phép bạn biên dịch python với một số hạn chế đối với backends khác nhau như C, LLVM, Net, vv
- Ngoài ra còn có shed-skin chuyển dịch python thành C++, nhưng tôi không thể nói nếu nó là tốt.
- PyPy triển khai trình biên dịch JIT cố gắng tối ưu hóa thời gian chạy bằng cách dịch các phần đang chạy trong thời gian chạy sang mã máy, nếu bạn viết cho trình thông dịch PyPy có thể là một đường dẫn khả thi.
- Cùng một tác giả đang làm việc trên JIT trong PyPy đã viết psyco trước đây tối ưu hóa python trong trình thông dịch CPython.
Bạn có thể sử dụng một cái gì đó như py2exe để biên dịch tập lệnh python của bạn thành một exe, hoặc Freeze cho một nhị phân linux.
xem: How can I create a directly-executable cross-platform GUI app using Python?
@Howler, py2exe sẽ không phân phối hầu hết những gì OP yêu cầu. Mã này vẫn chạy bên trong thời gian chạy Python (mặc dù đã đổi tên) và sẽ không chạy nhanh hơn bất kỳ tập lệnh nào) @David: Bạn có thể cân nhắc viết lại ứng dụng chính trong C/C++ và mở rộng w/Python. – technomalogical
Hoặc thay vì viết lại ứng dụng chính, chỉ cần tìm các điểm nóng và viết chúng trong C/C++ dưới dạng phần mở rộng Python. –
Thực ra, tôi đang tìm một giải pháp để tiêm mã trong môi trường đang chạy. Nhưng mã này cần phải được thực sự nhanh chóng, do đó, giải thích không phải là một lựa chọn. – David
Tôi nghĩ bạn có thể sử dụng jython để biên dịch python sang Java bytecode, và sau đó biên dịch với GCJ.
Tôi đã có rất nhiều thành công sử dụng Cython, mà là dựa trên và mở rộng pyrex:
Cython là một ngôn ngữ mà làm mở rộng viết C cho ngôn ngữ Python dễ dàng như Python chính nó. Cython được dựa trên Pyrex nổi tiếng, nhưng hỗ trợ nhiều chức năng và tối ưu hóa cạnh cắt hơn .
Ngôn ngữ Cython rất gần với ngôn ngữ Python, nhưng Cython bổ sung hỗ trợ gọi C chức năng và tuyên bố loại C trên biến và các thuộc tính lớp. Điều này cho phép trình biên dịch tạo ra rất mã C hiệu quả từ mã Cython.
Điều này làm cho Cython là ngôn ngữ lý tưởng để gói cho thư viện C bên ngoài, và cho các mô-đun C nhanh giúp tăng tốc độ thực thi mã Python.
- 1. Có dễ dàng giải mã đầy đủ các tệp đã được biên dịch (*. Pyc) của python không?
- 2. Có thể nhập tệp python đã biên dịch không?
- 3. Có thể các trán python biên dịch mã CUDA không?
- 4. Làm cách nào để biên dịch lại mã byte 2.5 của Python thành 2.7?
- 5. Các tệp bytecode được biên dịch (.pyc) có thể được tạo trong thư mục khác không?
- 6. Decompile Python 2.7 .pyc
- 7. Mục tiêu-C có biên dịch thành mã gốc hoặc mã byte không?
- 8. Tôi có nên "Biên dịch tập tin .py thành mã byte sau khi cài đặt" không?
- 9. Các tệp Python 2.5 .pyc có tương thích với các tệp Python 2.6 .pyc không?
- 10. R 2.14 byte biên dịch - không thể với install.packages?
- 11. Biên dịch lại các tệp mã byte OCaml
- 12. Trình biên dịch mã byte Java trong JavaScript
- 13. java có thể chạy mã scala đã biên dịch không?
- 14. Tôi có thể biên dịch Java thành mã gốc không?
- 15. Biên dịch DLL từ mã python
- 16. Python có thể được biên dịch để chạy trên động cơ V8 không?
- 17. Codec Python to_excel 'utf8' codec không thể giải mã byte
- 18. codec utf8 không thể giải mã byte 0x96 trong python
- 19. Mã C# không được biên dịch có biên dịch thành IL và chạy trên CLR không?
- 20. Bản đồ có thể được kiểm tra theo thời gian biên dịch có thể không?
- 21. Java có tạo mã đối tượng hoặc mã byte không?
- 22. Trình biên dịch sẽ chỉ biên dịch mã có thể được thực thi?
- 23. Tệp Pydev và * .pyc
- 24. Hiệu suất biên dịch mã bằng biên dịch biên dịch
- 25. Nguyên nhân CompositeId Không thể biên dịch lỗi tài liệu lập bản đồ
- 26. Tạo .pyc từ Python AST?
- 27. Tại sao các tập lệnh Python chạy được chính không được biên dịch thành các tệp pyc như mô-đun?
- 28. Có cách nào để "biên dịch" mã Python vào Arduino (Uno) không?
- 29. "Lỗi Unicode" unicodeescape "codec không thể giải mã byte ... Không thể mở tệp văn bản bằng Python 3
- 30. Có thể biên dịch mã .NET IL sang mã máy không?
RUNthon AFAIK không thay thế pyrex; chúng là những nỗ lực riêng biệt, và pyrex vẫn hoạt động tốt (nó sẽ là gợi ý thứ hai của tôi, sau khi viết lại các vấn đề trong C/C++). –
Ngoài ra còn có IronPython (giả sử Windows hoặc Mono), mặc dù nó có vấn đề cho dù bạn muốn có thêm tốc độ. –
Liên kết tới rpython và PyPy bị hỏng. – BandGap