Tôi đã nhận thấy rằng một số thư viện Python trưởng thành đã biên dịch trước các phiên bản cho hầu hết các kiến trúc (Win32/Win-amd64/MacOS) và các phiên bản của Python. Cách tiêu chuẩn để biên dịch các phần mở rộng của bạn cho các môi trường khác nhau là gì? Rượu nho? Máy ảo? Crowd tìm nguồn cung ứng?Làm cách nào để bạn biên dịch các phần mở rộng của Python C/C++ cho các hệ điều hành/phiên bản khác nhau của Python?
Trả lời
SWIG cung cấp đường dẫn để tạo mã đa nền tảng.
Xin lỗi, tôi không rõ về nó. Câu hỏi là về biên dịch thực tế, không phải là sự phát triển mã. – golobor
Tất cả các mô-đun mở rộng Python của tôi là C++, không phải C nên tôi sử dụng boost Python. Tôi cũng sử dụng các máy ảo khi tôi cần hỗ trợ các hệ điều hành khác nhau. Trình điều khiển xây dựng bjam của Boost cho phép bạn xây dựng với các phiên bản khác nhau của Python (2.6, 2.7) các phiên bản khác nhau của g ++ và nhiều thứ khác. Nếu tôi có một mô-đun mở rộng rất phổ biến và nhiều người muốn sử dụng nó trên các nền tảng mà tôi không có, thì tôi sẽ đảm bảo rằng mã của tôi rất dễ sử dụng (cần phải có) và cung cấp hướng dẫn về cách xây dựng nó với bjam bằng cách sử dụng một vài ví dụ khác nhau cho các phiên bản Python khác nhau, vv Điều đó sẽ đủ để bắt đầu. Nếu công trình này hoạt động, bạn có thể yêu cầu họ đóng góp các bản dựng của họ để những người khác có thể sử dụng chúng (tất nhiên là bạn không được hỗ trợ).
Chúng tôi sử dụng Máy ảo và máy chủ Hudson.
Chúng tôi có một Máy ảo cho mỗi kiến trúc mà chúng tôi hỗ trợ (thường biên dịch không kéo dài các tài nguyên được phân bổ cho họ, vì vậy VM là tốt). Tôi đoán cấu hình của mỗi máy ảo có thể được quản lý bởi một cái gì đó như Puppet hoặc Chef để đảm bảo nó là một môi trường xây dựng phù hợp. Tất nhiên, bạn có thể sử dụng các máy thực nếu bạn có phần cứng, nhưng bạn muốn tránh sử dụng các máy mà mọi người đang thực sự sử dụng (ví dụ: các máy trạm của nhà phát triển).
Sau đó, chúng tôi sử dụng dự án đa cấu hình ở Hudson để thiết lập ma trận dựng. Ma trận xây dựng cho phép chúng tôi (với một cú nhấp chuột) xây dựng nhiều phiên bản python, trên nhiều kiến trúc, nhưng về lý thuyết bạn có thể xây dựng mọi kết hợp mà bạn có thể thiết lập trong ma trận của mình. Tất nhiên bạn có thể sử dụng Jenkins thay thế.
đoán cách vm có thể là "bán" bất hợp pháp nếu một trong các mục tiêu của bạn là OSX :) vẫn có vẻ như cách VM có lẽ là cách tốt nhất để đi. – ashwoods
OSX đã cho phép ảo hóa trong một thời gian ngắn: http://www.macworld.com/article/1163755/vmware_fusion_update_lets_users_virtualize_leopard_snow_leopard.html – hbar
Chúng tôi thực sự sử dụng một trang trại nhỏ dành riêng cho OSX thay vì máy chủ ảo hóa - xin lỗi, nên làm rõ trong câu trả lời gốc. Đặc biệt là khi mua từ ebay, đây là đủ rẻ cho những gì chúng tôi yêu cầu, và được xếp chồng lên nhau trong một góc của phòng máy. Nhưng như hbar nói, ảo hóa đây cũng là một lựa chọn pháp lý bây giờ. –
- 1. Làm cách nào để chỉ định các cờ biên dịch khác nhau trong các bản dịch chỉ cho một tệp mở rộng Python/C?
- 2. Làm thế nào để bạn biên dịch trước các phần mở rộng gốc cho một gem ruby cho Linux?
- 3. Phần mở rộng của Python cho Win64 qua GCC
- 4. Hỗ trợ các phiên bản khác nhau của Python
- 5. Làm cách nào để mở rộng datetime.datetime của Python bằng các phương thức của riêng tôi?
- 6. Tại sao các phần mở rộng JPEG khác nhau?
- 7. Biên dịch C++ cho các phiên bản Ubuntu khác nhau
- 8. Sử dụng các phiên bản khác nhau của python cho các dự án khác nhau trong Eclipse
- 9. Làm cách nào để mở rộng các lớp khác bằng Python một cách chính xác? (python v3.3)
- 10. Làm cách nào để mở rộng cấu hình của các gói khác nhau trong Symfony2?
- 11. Làm cách nào để cấp các quyền khác nhau cho các lớp Java khác nhau?
- 12. Làm cách nào để kiểm tra phiên bản của python API tại thời gian biên dịch?
- 13. Làm cách nào để đảm bảo tất cả mã "biên dịch" của Python?
- 14. Làm cách nào để áp dụng các tùy chọn trình biên dịch khác nhau cho các trình biên dịch khác nhau trong cmake?
- 15. Mở rộng kích thước màn hình của ứng dụng web cho các thiết bị khác nhau
- 16. Tiện ích mở rộng của Python và OpenMP C
- 17. "Mở()" của Python ném các lỗi khác nhau cho "tệp không tìm thấy" - cách xử lý cả hai ngoại lệ?
- 18. Phần mở rộng tệp mã C++? .cc vs .cpp
- 19. Làm thế nào để thoát khỏi các phần mở rộng từ file basename sử dụng python
- 20. Tại sao mô-đun gắn trong python đôi khi tạo các tệp có các phần mở rộng khác nhau?
- 21. Làm cách nào để bạn biên dịch các tệp thi hành ELF cho Android?
- 22. Làm cho Eclipse xem các phần mở rộng tệp khác nhau như PHP
- 23. Phần mở rộng biên dịch PHP không hợp lệ
- 24. Phân phối mô-đun mở rộng trăn đã biên dịch trước bằng các đoạn biên
- 25. Xuất bản các phần mở rộng .cs và các phần khác trong IIS 7.0
- 26. trong phần mở rộng Python C
- 27. Python: Biên dịch các regex song song
- 28. Dòng shebang có điều kiện cho các phiên bản Python khác nhau
- 29. Làm cách nào để nhận được các phần khác nhau của url của yêu cầu Flask?
- 30. Làm thế nào tôi có thể hiển thị các biểu tượng khác nhau cho phần mở rộng tập tin cùng
Bạn có thể tìm thấy một số thông tin giới hạn về [trong tài liệu Python chính thức] (http://docs.python.org/distutils/builtdist.html). –
Cảm ơn, nhưng điều này chỉ trả lời một phần câu hỏi. – golobor
Tôi nghĩ [Christoph Gohlke] (http://www.lfd.uci.edu/~gohlke/) có thể trả lời câu hỏi này. Tôi đã chú ý đến nó. –