Копирование переменной в ядро ​​Jupyter из скрипта Python - PullRequest
0 голосов
/ 10 декабря 2018

Я хочу сделать следующее:

  1. Из скрипта Python подключиться к существующему ядру Jupyter.

  2. Скопировать объект, доступный в PythonСценарий для ядра Jupyter.

  3. Доступ к этому объекту из записной книжки Jupyter.

Пока я понял, что способ сделать это - через jupyter_client.Я также нашел связанный с этим вопрос здесь: Выполнение кода в ядре ipython с помощью KernelClient API .

Однако этот вопрос был сосредоточен либо на настройке значения скейлера, либо на выполнении кода.Как скопировать объект в ядро ​​Jupyter?

1 Ответ

0 голосов
/ 11 декабря 2018

Вот как далеко я продвинулся:

Во-первых, с IPython 4.0 многое изменилось, и поэтому любые из существующих примеров недопустимы больше.Кроме того, документации не существует.

Как создать экземпляр ядра IPython в скрипте Python

Вы можете сделать что-то вроде этого:

from jupyter_client import KernelManager

def main():
    km = KernelManager()
    km.start_kernel()

    cf = km.connection_file
    print("To connect a client: jupyter console --existing ", cf)

    kc = km.client()
    kc.start_channels()
    try:
        kc.wait_for_ready()
    except RuntimeError:
        kc.stop_channels()
        km.shutdown_kernel()
        raise

    # executes Python statement to create global variable named d 
    # and assign it value 32
    kc.execute('d=32')

    input("Press Enter to continue...")

if __name__ == '__main__':
    main()

Как подключиться к ядру IPython из консоли Jupyter

Просто выполните команду, напечатанную приведенным выше кодом:

jupyter console --existing <full json filename>

Затем, если вы введете d в консоли Jupyter, выувидит значение 32.

Как подключиться к ядру IPython из Jupyter Notebook

Это все еще сложно.Основная проблема заключается в том, что ноутбук Jupyter настаивает на собственном ядре и не имеет возможности подключиться к существующему ядру.Единственный выход - создать свой собственный класс менеджера ядра, примером которого является здесь , но, похоже, он не работает с более новым IPython.Затем вы вызываете ноутбук, указав использовать класс менеджера ядра:

jupyter notebook \
  --NotebookApp.kernel_manager_class=extipy.ExternalIPythonKernelManager \
  --Session.key='b""'

Эта часть все еще не работает.

...