2016-08-20 5 views
1

私はC++(Qt)でIPythonのフロントエンドに取り組んでいます。IPythonカーネルを起動し、ZMQソケットを使って接続するには?

私は自分のアプリケーションにPythonを埋め込み、プロットを取得してGUIで表示することができました。今、私はIPythonカーネルを起動し、ZMQソケットを通してそれに接続したいと思っています。

IPythonカーネルとの通信プロトコルにはdescriptionが見つかりました。ただし、どのポートに接続するかは、どこでもとは言いません。それで、通信プロトコルを持っているのはいいと思いますが、使用するポートがわからないと全く役に立たないのです。

ドキュメントには「カーネル仕様」が記載されており、jupyter kernelspec listコマンドを使用するよう指示されています。これは実際に私には2つのファイルだけを含む1つのディレクトリを示しています:logo-32x32.pngとlogo-64x64.png ...

私のIPythonカーネルと通信するために、

私はCから次のPythonコードを実行することによって、私のIPythonカーネルを起動++のQtアプリ:

import IPython 
IPython.start_kernel(argv=[]) 
+0

[ipy_repl.py'](https:// gist [Sublime Text](https://sublimetext.com)プログラミングエディタ用の[SublimeREPL](https://packagecontrol.io/packages/SublimeREPL)プラグインの[.github.com/MattDMo/6cb1dfbe8a124e1ca5af] Sublime固有のAPIはありません。基本的には、4.1.1までのIPythonと4.1.0までのjupyter_consoleで動作します(IPython 4以降のバージョンでは動作しません)。 IPython/Jupyterカーネルのオートコンプリート機能を利用します。 – MattDMo

+0

'start_kernel'は、現在のプロセスでカーネルを起動します。あなたが望むように聞こえるのは、アプリケーションプロセスから接続する別のプロセスのカーネルです。そのためには、[jupyter_client](http://jupyter-client.readthedocs.io/en/latest/api/manager.html)モジュールを使用します。あなたはSpyderのようなアプリケーションを見て、彼らが何をしているか見ることができます。 –

答えて

1

それはトーマス・Kは正しかったが判明しました。異なるプロセスでIPython/Jupyterカーネルを起動するための正しいアプローチは、次のとおりです。(例としてのpython3で)私が最初にこれを試したとき、私は許可エラーを得た

import jupyter_client 
kernel_manager, kernel_client = jupyter_client.start_new_kernel(kernel_name='python3') 

python3 -m ipykernel install --user 

をして使用することが可能である必要があり、あなたは

print(kernel_manager.get_connection_info()) 

によってポートを取得することができます。これは、のpython3カーネルの仕様をインストールすることで修正されました(どうやらJupyterが...これを自動的に行いません)これらのポートはゼロ-mq経由でカーネルに接続します。しかし、kernel_clientは、カーネルと通信するためのいくつかの方法を公開しているので、そのアプローチを使用する方が簡単かもしれません...

関連する問題