Путь к объекту дампа PyYAML

У меня проблема с дампом и загрузкой файлов YAML с помощью PyYAML.

У меня есть два отдельных приложения A и B. Я хотел бы сбросить файл YAML в A, а затем загрузить его и использовать в B. Но путь к объектам кажется неверным.

A-folder
    dump.py
B-folder
    the_module.py
    use.py

В dump.py у меня есть такой код:

yaml.dump(the_class_instance, file_stream, default_flow_style=False)

Он дает файл YAML:

!!python/object:B-folder.the_module.the_class
attribute_0: !!python/long '10'
attribute_1: !!python/long '10'

Затем мне нужно использовать этот файл YAML в use.py. Но я не могу правильно загрузить его как экземпляр the_module.the_module.the_class. В нем говорится:

cannot find module 'B-folder.the_module' (No module named B-folder.the_module)

Пробовал делать дамп в другом модуле B-folder.adaptor, в dump.py он просто вызывает методы из B-folder.adaptor, но все равно дает тот же результат.

Как с этим бороться? Спасибо.


person Joy    schedule 09.10.2012    source источник


Ответы (1)


Проблема здесь не в PyYAML, а в загрузке модуля Python.

В A я предполагаю, что вы импортируете the_module как часть пакета папки B, либо с import B-folder.the_module, либо с from B-folder import the_module. В данном случае имя модуля B-folder.the_module. Как видите, это помещается в файл YAML.

В B я предполагаю, что вы просто импортируете the_module внутри с чем-то вроде import the_module. В данном случае имя модуля the_module. Это не то же самое, что B-folder.the_module, поэтому вы получаете ошибку. Если вы вместо этого импортировали в B, используя from B-folder import the_module или import B-folder.the_module, даже если вы находитесь в той же папке, это должно решить проблему.

person cge    schedule 22.12.2012