Условное выполнение jupyter-notebook с %runPython

Программы на Python
Anonymous
Условное выполнение jupyter-notebook с %run

Сообщение Anonymous »

У меня есть блокнот Jupyter (в Microsoft Fabric), в котором я определяю функции, представьте себе так:
NOTEBOOK_1:
CELL_1:

Код: Выделить всё

def add(int a, int b):
return a + b
Затем я хочу запустить этот блокнот в другом, чтобы получить доступ к такой функции:
NOTEBOOK_2:
CELL_1:

Код: Выделить всё

%run NOTEBOOK_1
CELL_2:

Код: Выделить всё

x, y = 5
print(add(x, y))
Поскольку у меня есть несколько блокнотов, таких как блокнот 2, и я запускаю их иногда в произвольном порядке, мне нужен доступ к функции в любое время, но я хочу пропустить запуск блокнота 1, если функция уже определена. Как мне это сделать?
Я пробовал это:
NOTEBOOK_1:
CELL_0:

Код: Выделить всё

try:
prep_source_metadata
except NameError:
print("Execution necessary. Proceeding...")
else:
print("Execution unnecessary. Exiting...")
mssparkutils.notebook.exit(1)
Однако это также выходит из блокнота 2, поскольку нет специального отдельного запуска блокнота.
Я также нашел этот пост, Как передать переменную в волшебная функция «run» в IPython, где я вставляю переменную в часть %run. Поскольку мне не нужна ошибка, я полагаю, мне придется создать пустой блокнот для версии «не запускать». Я думаю, это сработало бы достаточно хорошо, но было бы совершенно неэлегантно. Есть ли лучший способ?
EDIT1: Что касается комментариев (спасибо!):
  • Поскольку я ограничен от Microsoft Fabric, я не могу просто использовать файл .py, мне приходится работать с блокнотами.
  • importnb не находит другой блокнот (возможно, это связано с инфраструктурой Microsoft Fabric. ..):

Код: Выделить всё

import importnb
with importnb.Notebook():
from NOTEBOOK_2 import add
приводит к

Код: Выделить всё

Cell In[7], line 4
1 import importnb
3 with importnb.Notebook():
----> 4     from Gold_Automation_Functions import prep_source_metadata

ModuleNotFoundError: No module named 'Gold_Automation_Functions'
  • Запуск другого ноутбука с помощью MSSparkUtils не работает, поскольку пространство имен не является общим (или, как вы это правильно описываете, это «NameError: имя 'my_function' не является определено")
Еще одна вещь, которую я попробовал, но она не работает, — это выход из вызываемого блокнота с помощью MSSparkUtils. К сожалению, это также выходит из записной книжки для вызовов. Попытка пропустить все ячейки может быть целесообразным подходом, но, похоже, не существует простого и элегантного решения.
EDIT2: Наиболее многообещающим способом на данный момент является использование . whl (https://learn.microsoft.com/en-us/fabri ... ge-library).

Подробнее здесь: https://stackoverflow.com/questions/786 ... k-with-run

Вернуться в «Python»