2009-03-25 13 views
54

PythonとJavaScriptを統合することは可能ですか?たとえば、JavaScriptでクラスを定義し、Pythonからクラスを使用できるようにする(またはその逆)ことができたとします。もしそうなら、最善の方法は何ですか?私はこれが可能であるだけでなく、誰かが "深刻な"プロジェクトまたは製品の中でそれを行った場合に興味があります。PythonとJavaScriptを統合する最良の方法は?

私はそれが1例えば、JythonRhinoを使用して可能になります推測しているが、私は誰もが今まで実際にこれを行うのかどうか好奇心、そして他のプラットフォーム(特にCPython)のためのソリューションがある場合。 http://code.google.com/p/pyjscore/

+1

おそらく、Emscriptenを使用してCPythonをJavaScriptにコンパイルし、ブラウザでCPythonを実行することができます。 JavaScriptからPython関数を呼び出すことは可能かもしれませんし、逆も可能です。 http://syntentials.com/static/python.html –

+1

@AndersonGreenこれはすでに完了しています:pypyjs - https://github.com/rfk/pypyjs – denfromufa

+0

それは価値があるのですが、[このSO答え](https:// stackoverflow.com/a/28652754/1519199)JSとPythonの間でオブジェクトを共有する統一されたアプローチを提示し、そして単にNodeJSモジュールがバンドルラップれる[このレポ](https://github.com/jdthorpe/ajvpy)に実装されていますWebpack経由でPythonモジュールとして公開しています。 – Jthorpe

答えて

2

あり(WebKitのから)JavaScriptCoreにおけるに基づく橋だが、それはかなり不完全だ...何か、SeaMonkeyのJavaScriptインタープリタの周りのPythonラッパーですか?上記のWebサイトから

pyjsは、Webとデスクトップの両方のためのリッチインターネットアプリケーション(RIA)開発プラットフォームです。 pyjsを使用すると、JavaScriptベースのWebアプリケーションをPythonで完全に記述できます。

24

方法についてpyjs

+9

パジャマはPyjsになりました。リンク - http://pyjs.org/ – AppleGrew

+1

@AppleGrewパジャマを(サーバー側のコンポーネントなしで)ブラウザで完全に実行できますか? –

+1

注pyjsは、Python 3.0+ https://github.com/pyjs/pyjs/issues/831 jsonpickleが非で使用することが困難になり、非標準の「PY/refの」参照型を使用していること – AXO

6

javascriptとpythonの間で複雑なデータ型を共有することに興味があれば、jsonpickleをチェックしてください。これは、標準のPython JSONライブラリをラップしますが、Pythonクラスやその他のデータ型のシリアライズとデシリアライズにはいくつかのヒントがあります。

かなり多くのGoogle App Engineプロジェクトがこのライブラリを使用しています。 JooseおよびFirePythonには両方ともjsonpickleが組み込まれています。

+0

注意をサポートしていないことPythonクライアント。現在、それをオフにする方法はありません。 http://code.google.com/p/jsonpickle/issues/detail?id=9 – pimlottc

2

PyPyプロジェクトもチェックしたいと思うかもしれません。PythonからJavascript、C、llvmを含むPython to(anything)コンパイラがあります。これにより、Pythonでコードを記述し、それを必要に応じてJavascriptにコンパイルすることができます。

http://codespeak.net/pypy

また、有益なブログをチェックアウト:

http://morepypy.blogspot.com/

残念ながら、しかし、あなたがこの方法をPYTHONするJavascriptを変換することはできませんが。全体的にうまくいっているようですが、Bub'n'Brosゲームのオンライン版(コンパイルされたPythonから作成された)のJavascriptを使用していました(ただし、サーバーはしばらくダウンしています)。

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

9

がPythonオブジェクトとJavaScriptオブジェクト間の「明白な」遷移を可能にする2つのプロジェクトは、INTから「明らか」の翻訳であるか、またはNumberに浮遊し、STRまたはUnicode文字列に:一つとして、PyV8と作者はすでに述べています:python-spidermonkey

実際にpyv8の2つの実装があります。オリジナルの実験はsebastien louiselで、2番目の実験は積極的開発でflier liuです。

これらのプロジェクトへの興味は、Python-to-javascriptコンパイラpyjamasにリンクして、JIT pythonアクセラレータを作成することでした。

だから、そこにはたくさんのことがあります - あなたがしたいことだけに依存します。

+1

pyv8残念ながら、ほとんどすべてここでの回答で提示他のアイデアのとは対照的に、まだよく維持しています。 –

1

別の可能性はXPCOMを使用することで、XULベースのアプリケーションで言う(Firefoxの、サンダーバード、コモドなどのような)

1

私はいくつかの時間前Pyjonで遊んとPythonで直接のJavascriptのevalを書くために管理するようだと走りました。簡単なプログラム...それはJSの完全な実装ではなく、むしろ実験です。 ここでそれを取得します。

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

3

PyExecJSはPyV8、ノード、JavaScriptCoreにおける、SpiderMonkeyの、のJScriptのそれぞれを使用することができます。

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

は、Pyv8とは異なりOSX上でそのまま動作します –

1

使用Js2PyのPythonにはJavaScriptを翻訳する、これが利用できる唯一のツール:)

+0

Python 3.xはサポートしていませんhttps://github.com/PiotrDabkowski/Js2Py/issues/6 – AXO

+1

Python 3を今すぐサポート –

10

あるこの質問は正確に若くはないですが、いくつかの選択肢が出ている:

  • "Skulptは完全にブラウザ内にあります。 Pythonの実装です。
  • Brythonから
  • RapydScript "クライアント側のWebプログラミングのためのAのPython 3の実装" - "PythonのようなJavaScriptの余分なオーバーヘッドや癖のない"
  • Transcrypt - 「リーンと複数でのJavaScriptのコンパイラにはPython 3.6を意味します継承、ソースマップ、静的型チェック、および選択的な演算子のオーバーロードが含まれます。 (on Github
+4

SkulptとBrython本格的なコンパイラ/言語ではなく、おもちゃです。RapydScriptとTranscryptはパフォーマンスの面で円を描きます。実際、JSでのPythonインタプリタの不在は、RapydScriptが最初に発明された理由でした。 RapydScriptには、TypeScriptと同様にタイプセーフティが追加されました。 免責事項:私はRapydScriptのメンテナーです。 –

+0

@AlexanderTsepkov私はそれらをテストする時間がありませんでしたので、あなたのおかげでありがとう:) –

+1

あなたはjsのエコシステムに身を浸したくない場合は、Transcryptはpipインストールされて、いいです。 RapydScriptは、これまでのところ私が収集した限り、最も迅速な選択肢があるようだ。オプションの素敵な配列がここに記述されています(https://github.com/zoofIO/flexx/wiki/PyScript-vs-X)。維持されていないように見える[Jiphy](https://github.com/timothycrosley/jiphy)もあります。 – Jay

関連する問題