2012-01-04 56 views
8

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?

+2

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). –

+0

Cảm ơn, nhưng điều này chỉ trả lời một phần câu hỏi. – golobor

+0

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ó. –

Trả lời

0

SWIG cung cấp đường dẫn để tạo mã đa nền tảng.

+0

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

0

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ợ).

7

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ế.

+0

đ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

+0

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

+0

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ờ. –

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