Có cố gắng nhắm mục tiêu hai trong số các môi trường này cùng một lúc tôi có thể nói một cách an toàn nếu bạn phải sử dụng cơ sở dữ liệu, v.v. viết mã duy nhất cho môi trường đó. Bạn đã có một cách tuyệt vời để xử lý tình huống này chưa?Một số chiến lược để viết mã python hoạt động trong CPython, Jython và IronPython
Trả lời
Nếu bạn làm tìm thấy bạn cần phải viết mã duy nhất cho một môi trường, sử dụng con trăn
import mymodule_jython as mymodule
import mymodule_cpython as mymodule
có công cụ này trong một module đơn giản ('' module_importer ''?) Và viết mã của bạn như thế này :
from module_importer import mymodule
Bằng cách này, tất cả những gì bạn cần làm là thay đổi module_importer.py
trên mỗi nền tảng.
@ Daren Thomas: Tôi đồng ý, nhưng bạn nên sử dụng số platform module để xác định trình thông dịch nào bạn đang chạy.
Theo như tôi biết 'nền tảng' không có sẵn trong IronPython (2.0.1). 'os' cũng vậy. – Cyberdrow
Tôi viết mã cho CPython và IronPython nhưng mẹo cũng nên hoạt động với Jython.
Về cơ bản, tôi viết tất cả mã nền tảng cụ thể trong các mô-đun/gói riêng biệt và sau đó nhập mã phù hợp dựa trên nền tảng tôi đang chạy. (xem bình luận của cdleary ở trên)
Điều này đặc biệt quan trọng khi nói đến sự khác biệt giữa việc triển khai SQLite và nếu bạn đang triển khai bất kỳ mã GUI nào.
Điều # 1 IMO: Tập trung vào an toàn chủ đề. CPython's GIL làm cho việc viết các luồng an toàn dễ dàng bởi vì chỉ có một luồng có thể truy cập trình thông dịch tại một thời điểm. IronPython và Jython là một chút ít cầm tay mặc dù.
Tôi khá chắc chắn rằng bạn đã biết điều này nhưng tiếc là Jython can't load c extension modules.
Có hai vấn đề lớn ở đây chơi ...
Thứ nhất, để kiến thức của tôi, chỉ CPython đã RAII - bạn phải đóng tài nguyên của riêng bạn trong Jython, Ironpython, v.v.
Và thứ hai, như đã được đề cập, là an toàn luồng.
- 1. PyPy cung cấp những gì cho CPython, Jython và IronPython?
- 2. Các tập lệnh CPython, IronPython, Jython có tương thích với nhau không?
- 3. CPython hoặc IronPython?
- 4. IronPython ScriptRuntime tương đương với CPython PYTHONPATH
- 5. Viết một máy chủ dựa trên socket trong Python, các chiến lược được khuyến nghị?
- 6. khả năng tương thích giữa CPython và IronPython cPickle
- 7. Làm thế nào để viết mẫu chiến lược bằng Python khác với ví dụ trong Wikipedia?
- 8. fast-ish python/jython IPC?
- 9. PHP tự động tải và đặt tên chiến lược
- 10. Sự khác nhau giữa Python vs Jython vs IronPython vs wxPython là gì?
- 11. Chiến lược chống lại chính sách và chính sách chống lại chiến lược
- 12. rối Layout chiến lược
- 13. Công cụ/chiến lược tự động hóa EC2?
- 14. Chiến lược tìm Heisenbugs
- 15. Các chiến lược để tăng tốc các hoạt động ORM hàng loạt ở Django
- 16. Hidden Multithreading Bottlenecks trong Jython?
- 17. Làm cách nào để viết giảm song song bằng các chiến lược trong Haskell?
- 18. chiến lược tốt nhất để viết móc cho lật đổ trong Windows
- 19. chiến lược xóa RESTful
- 20. Chiến lược triển khai Heroku + Github
- 21. Chiến lược Buster Cache trong ASP.Net
- 22. RabbitMQ, Pika và chiến lược kết nối lại
- 23. Đánh giá chiến lược
- 24. Khi nào thì Jython sẽ hỗ trợ Python 3?
- 25. Chiến lược Python để trích xuất văn bản từ các trang html không đúng định dạng
- 26. Chiến lược sao chép PostgreSQL
- 27. Chiến lược triển khai hashCode
- 28. Chiến lược cho desugaring Haskell
- 29. Chiến lược phiên bản CouchDB
- 30. Chiến lược nào để sử dụng với đa xử lý trong python
Vì vậy, Daren, có cách nào để làm cho module_importer nhập biến đúng động dựa trên một số biến môi trường, v.v. – minty
Xin lỗi, tôi vẽ một ô trống ở đây. Điều này sẽ là một câu hỏi SO xuất sắc mặc dù: "Làm thế nào để tự động tìm hiểu xem chúng tôi đang chạy Jython, CPython hoặc IronPython?". Sau đó, bạn chỉ có thể làm điều đó trong ifs ... –
Mô-đun Python 'os' có thể được sử dụng làm ví dụ. Nó cung cấp các thói quen hệ điều hành, ví dụ: 'os.unlink',' os.rename', v.v. tùy thuộc vào hệ thống bạn đang sử dụng. – jfs