Я пытаюсь создать процесс, который динамически просматривает записные книжки Jupyter, компилирует их при модификации и импортирует их в мой текущий файл, однако я не могу выполнить обновленный код. Выполняется только первая версия, которая была загружена.
Есть файл с именем producer.py
, который вызывает эту функцию несколько раз:
import fs.fs_util as fs_util
while(True):
fs_util.update_feature_list()
В fs_util.py
Я делаю следующее:
from fs.feature import Feature
import inspect
from importlib import reload
import os
def is_subclass_of_feature(o):
return inspect.isclass(o) and issubclass(o, Feature) and o is not Feature
def get_instances_of_features(name):
module = __import__(COMPILED_MODULE, fromlist=[name])
module = reload(module)
feature_members = getattr(module, name)
all_features = inspect.getmembers(feature_members, predicate=is_subclass_of_feature)
return [f[1]() for f in all_features]
Эта функция вызывается by:
def update_feature_list(name):
os.system("jupyter nbconvert --to script {}{} --output {}{}"
.format(PATH + "/" + s3.OUTPUT_PATH, name + JUPYTER_EXTENSION, PATH + "/" + COMPILED_PATH, name))
features = get_instances_of_features(name)
for f in features:
try:
feature = f.create_feature()
except Exception as e:
print(e)
Существует другой не относящийся к делу код, который проверяет, был ли файл изменен и т. д. c.
Я могу сказать, что файл перезагружается правильно, потому что когда я использую inspect.getsource(f.create_feature)
в классе отображает обновленный исходный код, однако во время выполнения возвращает более старые значения. Я проверил это, изменив операторы печати, а также сравнив возвращаемые значения.
Также для некоторого дополнительного контекста файл, который я пытаюсь импортировать:
from fs.feature import Feature
class SubFeature(Feature):
def __init__(self):
Feature.__init__(self)
def create_feature(self):
return "hello"
Мне было интересно, что Я делал неправильно?