Мой модуль содержит класс, который должен быть пригоден для выбора, как экземпляр, так и определение. У меня есть следующая структура:
MyModule
|-Submodule
|-MyClass
В других вопросах, касающихся SO, я уже обнаружил, что укроп способен выбирать определения классов иконечно, он работает, копируя определение MyClass
в отдельный скрипт и выбирая его там, например так:
import dill as pickle
class MyClass(object):
...
instance = MyClass(...)
with open(..., 'wb') as file:
pickle.dump(instance, file)
Однако при импорте класса это не работает:
Травление:
from MyModule.Submodule import MyClass
import dill as pickle
instance = MyClass(...)
with open(.., 'wb') as file:
pickle.dump(instance, file)
Загрузка:
import dill as pickle
with open(..., 'rb') as file:
instance = pickle.load(file)
>>> ModuleNotFoundError: No module named 'MyModule'
Я думаю, что определение класса сохранено по ссылке, хотя оно не должно соответствовать настройкам по умолчанию в укропе.Это делается правильно, когда MyClass
известен как __main__.MyClass
, что происходит, когда класс определен в основном скрипте.
Мне интересно, есть ли способ отсоединить MyClass
от MyModule
?Есть ли способ заставить его работать как импорт верхнего уровня (__main__.MyClass
), чтобы укроп знал, как загрузить его на другую мою машину?
Актуальный вопрос: Почему укроп выбрасывает внешние классы по ссылке независимо от того, что