Я работаю над внешним интерфейсом IPython в C ++ (Qt).
Мне удалось внедрить Python в мое приложение, получить графики и показать их в моем графическом интерфейсе. Теперь я хочу запустить ядро IPython и подключиться к нему через сокеты ZMQ.
Я нашел описание для протокола связи с ядрами IPython. Тем не менее, это не говорит в любом месте к каким портам подключаться. Поэтому неплохо иметь протокол связи, но совершенно бесполезно, если я не знаю, какие порты использовать.
Документация упоминает «спецификации ядра» и говорит мне использовать jupyter kernelspec list
команда. Это действительно показывает мне один каталог, который содержит только два файла: logo-32×32.png и logo-64×64.png …
Как мне найти порты, к которым мне нужно подключиться, чтобы общаться с моими ядрами IPython?
Я запускаю свое ядро IPython, выполняя следующий код Python из моего приложения C ++ Qt:
import IPython
IPython.start_kernel(argv=[])
Оказывается, Томас К был прав. Правильный подход для запуска ядра IPython / Jupyter в другом процессе: (на примере python3)
import jupyter_client
kernel_manager, kernel_client = jupyter_client.start_new_kernel(kernel_name='python3')
Когда я впервые попробовал это, я получил ошибку разрешения. Это было исправлено установкой спецификации ядра python3 (очевидно, Jupyter не делает это автоматически …):
python3 -m ipykernel install --user
И тогда вы можете получить порты по
print(kernel_manager.get_connection_info())
Должно быть возможно использовать эти порты для подключения к ядру через zero-mq. Тем не менее kernel_client
предоставляет несколько методов для взаимодействия с ядром, так что может быть проще использовать этот подход …
Других решений пока нет …