2009-03-25 45 views
54

Có thể tích hợp Python và JavaScript không? Ví dụ, hãy tưởng tượng bạn muốn có thể định nghĩa các lớp trong JavaScript và sử dụng chúng từ Python (hoặc ngược lại). Nếu vậy, cách tốt nhất là gì? Tôi quan tâm không chỉ nếu điều này là có thể, nhưng nếu bất cứ ai đã thực hiện nó trong một dự án "nghiêm trọng" hoặc sản phẩm.Cách tốt nhất để tích hợp Python và JavaScript?

Tôi đoán có thể sử dụng JythonRhino, nhưng tôi tò mò liệu có ai thực sự thực hiện việc này hay không và nếu có giải pháp cho các nền tảng khác (đặc biệt là CPython).

+1

Có lẽ bạn có thể biên dịch CPython thành JavaScript bằng Emscripten và sau đó chạy CPython trong trình duyệt. Có thể gọi hàm Python từ JavaScript và ngược lại. http://syntensity.com/static/python.html –

+1

@AndersonGreen điều này đã được thực hiện: pypyjs - https://github.com/rfk/pypyjs – denfromufa

+0

Đối với những gì nó có giá trị, [câu trả lời SO này] (https: // stackoverflow.com/a/28652754/1519199) trình bày một cách tiếp cận thống nhất để chia sẻ các đối tượng giữa JS và Python, và được thực hiện trong [repo này] (https://github.com/jdthorpe/ajvpy) mà chỉ đơn giản là kết thúc một mô-đun NodeJS đi kèm thông qua webpack và cho thấy nó như là một mô-đun Python. – Jthorpe

Trả lời

18

Dưới đây là một cái gì đó, một wrapper Python xung quanh phiên dịch SeaMonkey Javascript ... http://pypi.python.org/pypi/python-spidermonkey

+0

Điều này có vẻ như là điều gần gũi nhất với những gì tôi đang tìm kiếm; cảm ơn. –

24

Làm thế nào về pyjs?

Từ trang web trên:

pyjs là một ứng dụng Internet phong phú (RIA) Nền tảng phát triển cho cả Web và Desktop. Với pyjs bạn có thể viết các ứng dụng web hỗ trợ JavaScript hoàn toàn bằng Python.

+9

Pyjama hiện là Pyjs. Link - http://pyjs.org/ – AppleGrew

+1

@AppleGrew Có thể chạy bộ đồ ngủ hoàn toàn trong trình duyệt (không có bất kỳ thành phần phía máy chủ nào) không? –

+1

Lưu ý rằng pyjs không hỗ trợ Python 3.0+ https://github.com/pyjs/pyjs/issues/831 – AXO

6

Nếu bạn chỉ muốn chia sẻ các loại dữ liệu phức tạp giữa javascript và python, hãy xem jsonpickle. Nó kết thúc tốt đẹp các thư viện Python chuẩn của Python, nhưng có một số khéo léo trong việc tuần tự hóa và deserializing các lớp Python và các kiểu dữ liệu khác.

Khá nhiều dự án Google App Engine đã sử dụng thư viện này. JooseFirePython cả hai đều kết hợp jsonpickle.

+0

Lưu ý rằng jsonpickle sử dụng loại tham chiếu "py/ref" không chuẩn mà làm cho khó sử dụng hơn cho không khách hàng python. Hiện tại không có cách nào để tắt nó đi. http://code.google.com/p/jsonpickle/issues/detail?id=9 – pimlottc

2

Bạn cũng có thể muốn xem dự án PyPy - chúng có trình biên dịch Python (bất kỳ), bao gồm Python tới Javascript, C và llvm. Điều này cho phép bạn viết mã của bạn bằng Python và sau đó biên dịch nó thành Javascript như bạn mong muốn.

http://codespeak.net/pypy

Ngoài ra, hãy kiểm tra các blog thông tin:

http://morepypy.blogspot.com/

Đáng tiếc là mặc dù, bạn không thể chuyển đổi Javascript để Python theo cách này. Nó dường như làm việc thực sự tốt tổng thể, họ sử dụng để có một Javascript (được làm từ biên dịch Python) phiên bản của trò chơi trực tuyến Bub'n'Bros (mặc dù máy chủ đã được xuống một thời gian).

http://bub-n-bros.sourceforge.net

9

có hai dự án cho phép một quá trình chuyển đổi "rõ ràng" giữa các đối tượng python và các đối tượng javascript, với bản dịch "rõ ràng" từ int hoặc nổi lên Số lượng và str hoặc unicode để String: PyV8 và, như một nhà văn đã đề cập: python-spidermonkey.

thực sự có hai lần triển khai pyv8 - thí nghiệm ban đầu là bởi sebastien louisel và thử nghiệm thứ hai (trong hoạt động tích cực) là bởi flier liu.

sở thích của tôi trong các dự án này là liên kết chúng với pyjamas, trình biên dịch python-to-javascript, để tạo bộ gia tốc python JIT.

để có rất nhiều thứ ở đó - nó chỉ phụ thuộc vào những gì bạn muốn làm.

+1

pyv8 vẫn được duy trì tốt, trái ngược với hầu hết các ý tưởng khác được trình bày trong câu trả lời ở đây, thật không may. –

1

một khả năng khác là sử dụng XPCOM, nói trong các ứng dụng XUL dựa (như firefox, thunderbird, Komodo, vv)

1

Tôi đã chơi với Pyjon một số thời gian trước đây và dường như quản lý để viết eval Javascript của trực tiếp bằng Python và chạy các chương trình đơn giản ... Mặc dù nó không hoàn thành việc thực hiện JS và đúng hơn là một thử nghiệm. lấy nó ở đây:

http://code.google.com/p/pyjon/

3

PyExecJS có thể sử dụng mỗi PyV8, Node, JavaScriptCore, SpiderMonkey, JScript.

>>> import execjs 
>>> execjs.eval("'red yellow blue'.split(' ')") 
['red', 'yellow', 'blue'] 
>>> execjs.get().name 
'Node.js (V8)' 
+0

hoạt động ngoài hộp trên OSX không giống như pyv8 –

1

Sử dụng Js2Py dịch Javascript để Python, đây là công cụ duy nhất có sẵn :)

+0

Không hỗ trợ Python 3.x https://github.com/PiotrDabkowski/Js2Py/issues/6 – AXO

+1

Hỗ trợ Python 3 ngay bây giờ –

10

Câu hỏi này là không chính xác trẻ, nhưng đã có đưa ra một số lựa chọn thay thế:

  • "Skulpthoàn toàn trong trình duyệt triển khai Python. "
  • Brython - "Một Python 3 thực hiện cho client-side lập trình web"
  • RapydScript - "Python-như JavaScript mà không có overhead hoặc thoái thác thêm"
  • Transcrypt - "Lean và có nghĩa là Python 3.6 để trình biên dịch Javascript với nhiều thừa kế, sourcemaps, kiểm tra kiểu tĩnh và quá tải toán tử chọn lọc. " (cũng on Github)
+4

Chỉ cần thêm hai xu của tôi, cả Skulpt và Brython là đồ chơi chứ không phải là trình biên dịch/ngôn ngữ toàn diện.RapydScript và Transcrypt sẽ chạy vòng tròn xung quanh chúng hiệu quả. Trong thực tế, sự vắng mặt của trình thông dịch Python thực hiện trong JS là lý do mà RapydScript được phát minh để bắt đầu. RapydScript giờ đây có thêm lợi ích về an toàn kiểu, giống như TypeScript. tuyên bố từ chối trách nhiệm: Tôi là người duy trì RapydScript. –

+0

@AlexanderTsepkov Tôi không có thời gian để kiểm tra chúng, vì vậy cảm ơn bạn đã thêm :) –

+1

Transcrypt có thể được cài đặt pip, tốt đẹp nếu bạn không muốn đắm mình trong hệ sinh thái js. Tuy nhiên, RapydScript dường như là tùy chọn chuyển nhanh nhất cho tới giờ. Một loạt các tùy chọn được mô tả [ở đây] (https://github.com/zoofIO/flexx/wiki/PyScript-vs-X). Ngoài ra còn có [Jiphy] (https://github.com/timothycrosley/jiphy) mà dường như không có gì. – Jay

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