Nhúng Python vào ứng dụng iPhone


94

Vì vậy, đó là một thiên niên kỷ mới; Apple đã vẫy tay của họ; hiện hợp pháp để đưa trình thông dịch Python vào ứng dụng iPhone (App Store).

Làm thế nào để một người làm điều này? Tất cả các cuộc thảo luận hiện có (không có gì đáng ngạc nhiên) đều đề cập đến việc bẻ khóa. (Câu hỏi cũ hơn: Tôi có thể viết các ứng dụng iPhone gốc bằng Python không )

Mục tiêu của tôi ở đây không phải là viết ứng dụng PyObjC mà là viết một ứng dụng objC thông thường chạy Python dưới dạng thư viện nhúng. Mã Python sau đó sẽ gọi lại mã Cocoa bản địa. Đó là mẫu "logic điều khiển là mã Python".

Có hướng dẫn nào để lấy Python được tích hợp trong XCode để ứng dụng iPhone của tôi có thể liên kết nó không? Tốt hơn là một Python rút gọn, vì tôi sẽ không cần 90% thư viện tiêu chuẩn.

Tôi có thể tìm ra luồng và API mở rộng Python; Tôi đã làm điều đó trên MacOS. Nhưng chỉ sử dụng trình biên dịch dòng lệnh, không phải XCode.


Câu trả lời:


30

Cách bạn xây dựng Python không thực sự quan trọng - ví dụ như bạn không cần phải xây dựng nó bằng Xcode - nhưng điều quan trọng là sản phẩm của quá trình xây dựng đó.

Cụ thể, bạn sẽ cần xây dựng một thứ gì đó như libPython.a có thể được liên kết tĩnh vào ứng dụng của bạn. Sau khi bạn có .a, bạn có thể thêm .a vào dự án Xcode cho (các) ứng dụng của bạn và từ đó, nó sẽ được liên kết và ký giống như phần còn lại của ứng dụng của bạn.

IIRC (đã lâu rồi kể từ khi tôi xây dựng python bằng tay) python out-of-the-box sẽ xây dựng một libPython.a (và một loạt các thư viện khác), nếu bạn định cấu hình nó đúng cách.

Tất nhiên, vấn đề thứ hai của bạn sẽ là biên dịch chéo python cho ARM từ hộp 86 của bạn . Python là một dự án dựa trên autoconf và autoconf là một khó khăn trong quá trình biên dịch chéo.

Khi bạn nói chính xác, việc làm cho nó nhỏ đi sẽ rất quan trọng.

Cũng không có gì ngạc nhiên khi bạn không phải là người đầu tiên muốn làm điều này, nhưng với iOS thì không. Python đã bị ép vào các thiết bị có khả năng thấp hơn nhiều so với các thiết bị chạy iOS. Tôi tìm thấy một chủ đề với một loạt các liên kết khi googling về; nó có thể hữu ích .

Ngoài ra, bạn có thể muốn tham gia danh sách pyobjc-dev . Mặc dù bạn không nhắm mục tiêu đến một ứng dụng dựa trên PyObjC (mà, btw, là một ý tưởng hay - PyObjC còn một chặng đường dài trước khi nó trở nên thân thiện với iOS), cộng đồng PyObjC đã thảo luận về điều này và Ronald, của bất kỳ ai, có lẽ là người am hiểu nhất về lĩnh vực cụ thể này. Lưu ý rằng PyObjC sẽ phải giải quyết vấn đề Python được nhúng trên iOS trước khi chuyển PyObjC. Điều kiện tiên quyết của họ là yêu cầu của bạn, như nó đã được.


Cảm ơn vì các liên kết. (Tôi sử dụng Python trên Sharp Zaurus cho nhiều phiên bản trước đó của dự án này, nhưng đó là Python 1.6 và ai đó đã làm bao bì ...)
Andrew Plotkin

4
Tôi đã từng chuyển Python sang PSP của Sony; có thể một số lịch sử Subversion sẽ giúp bạn. Tuy nhiên, không chính xác là một câu trả lời. tại đây: python-psp.net/trac
fraca7

22

Tôi đã đưa một tập lệnh rất thô lên github để tìm nạp và xây dựng python2.6.5 cho iPhone và trình mô phỏng.

http://github.com/cobbal/python-for-iphone

Đang tiến hành

Bản cập nhật hơi đáng buồn gần 2 năm sau: (sao chép từ README trên github)

Dự án này chưa bao giờ thực sự khiến tôi hài lòng với python chạy trên iPhone và tôi không thể khuyên bạn nên sử dụng nó cho bất kỳ dự án nghiêm túc nào ở giai đoạn này.

Thiếu sót đáng chú ý nhất là hỗ trợ pyobjc (hóa ra khó chuyển sang iPhone hơn nhiều vì nó dựa vào mã nền tảng cụ thể hơn)

Ngoài ra còn thiếu là khả năng biên dịch tĩnh các mô-đun, (tất cả hiện được xây dựng dưới dạng dylibs hoạt động để phát triển, nhưng theo hiểu biết của tôi thì sẽ không được phép trong App Store)

Tại thời điểm này, dự án này chủ yếu là để trở thành điểm khởi đầu cho bất kỳ ai thông minh hơn tôi, những người muốn và có thể giải quyết các vấn đề trên.

Tôi thực sự ước việc viết ứng dụng hoàn toàn bằng Python là thực tế, nhưng tại thời điểm này, điều đó dường như là không thể.


Cảm ơn! Tôi sẽ không có cơ hội để xem nó trong một vài ngày, nhưng tôi chắc chắn sẽ thử nó sớm.
Andrew Plotkin

Nếu pyobjckhó biên dịch, nó có khả thi để sử dụng ctypeskhông? Trong trường hợp đó, câu trả lời này có thể là một manh mối (nhận ra nó chỉ là sự khởi đầu của một công việc lớn và đau đớn, nhưng vẫn còn).
Jacob Oscarson

10

Tôi cũng đã bắt đầu một dự án như vậy. Nó đi kèm với tập lệnh biên dịch đơn giản của riêng nó, do đó không cần phải làm phiền với autoconf để lấy thư viện tĩnh được biên dịch chéo của bạn. Nó có thể xây dựng một thư viện tĩnh hoàn toàn không phụ thuộc của Python với một số mô-đun phổ biến. Nó phải dễ dàng mở rộng.

https://github.com/albertz/python-embedded/


Tôi không nhận được biên dịch của bạn để làm việc. Nó có biên dịch, nhưng thiếu một số mô-đun nội trang như '-collections'. Bất kỳ ý tưởng?
bijan,

Tôi đã không bao gồm tất cả các mô-đun C gốc. Chỉ cần sửa đổi nó.
Albert

Có vẻ như ngày ... chỉ hoạt động với iOS 4.3? Bạn có thể ghi lại cách làm cho điều này hoạt động với các phiên bản hiện tại hơn không?
ArtOfWarfare

@ArtOfWarfare: Bạn đã không sử dụng nó trong một thời gian, tại sao nó không hoạt động với các phiên bản mới hơn? Có thể tạo báo cáo lỗi trên GitHub nếu bạn thấy bất kỳ vấn đề nào.
Albert
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.