Импортировать блокнот Jupyter как модуль, но разрешить проверку - PullRequest
0 голосов
/ 11 июня 2018

Я работаю над проектом, в котором я импортирую записную книжку как модуль в другой модуль.Я использую пример на IPython GH, и он отлично работает.

Однако сейчас я пытаюсь добавить функцию, для которой мне нужен доступ к исходному коду (inspect.getsourcelines())функции / класса-метода.Эта функция работает, когда я выполняю ее в одной записной книжке.Однако, как только я импортирую функцию в виде модуля, inspect не может больше читать источники.

Это потому, что код выполняется через exec(code, mod.__dict__), что, как ожидается, и Python по умолчанию, не разрешит источникичтобы быть прочитанным.

Я искал некоторое время, но не нашел окончательного ответа, поэтому вот мои вопросы:

  1. Почему в примере исходный код выполняется с exec?(Мое подозрение: потому что код был предварительно преобразован). РЕДАКТИРОВАТЬ: Почему run_cell не используется в примере?
  2. В общем, что происходит, когда я выполняю ячейку Jupyter?Код там трансформируется?РЕДАКТИРОВАТЬ: я предполагаю, что это run_cell, я прав?
  3. Можно ли изменить пример module-import для использования стандартной команды execute-cell и разрешить использование inspect посмотреть на источники?

1 Ответ

0 голосов
/ 18 июня 2018

Так что я до сих пор не нашел полностью приемлемого решения.

Для всех, кто интересуется: в качестве обходного пути я использую команду %run filename, которая импортирует все в локальную записную книжку (а также печатает все выходные данные, которые она выполняет [1])

Проблема: все «локально», а не в подмодуле.Это означает, что любые переменные, определенные в импортированном блокноте, доступны и перезаписывают существующие.Это может стать немного раздражающим.(Но сейчас я по крайней мере рад, что это работает несколько).

[1] %%capture блокирует вывод и делает его хотя бы чистым.

...