Python相对路径-ModuleNotFoundError

Python相对路径-ModuleNotFoundError,python,python-3.x,scikit-learn,pickle,Python,Python 3.x,Scikit Learn,Pickle,我需要对已实例化的python类进行pickle,因此需要使用相对路径。我使用的是Python版本3.6.6。以下是项目结构和代码的示例: modelling/ test.py mod1/ __init__.py classic_mod.py init.py from .classic_mod import classic 经典型 class classic: def __init__(self, input_string):

我需要对已实例化的python类进行pickle,因此需要使用相对路径。我使用的是Python版本3.6.6。以下是项目结构和代码的示例:

modelling/
    test.py
    mod1/
        __init__.py
        classic_mod.py
init.py

from .classic_mod import classic
经典型

class classic:

    def __init__(self, input_string):
        self.input_string = input_string
        print(self.input_string)

    def log_info(self):
        print(self.input_string)
test.py

from .mod1 import classic_mod
from sklearn.externals import joblib

model = classic_mod.classic("Hello World!")
joblib.dump(model, "model.pkl")
如果使用绝对路径,则在将pickle文件加载到另一个文件夹中的python中时会遇到问题。当我运行test.py时,我会收到一个错误消息:

Traceback (most recent call last):
  File "test.py", line 2, in <module>
    from .mod1 import classic_mod
ModuleNotFoundError: No module named '__main__.mod1'; '__main__' is not a package
回溯(最近一次呼叫最后一次):
文件“test.py”,第2行,在
从.mod1导入经典\u mod
ModuleNotFoundError:没有名为“\uuuu main\uuuu.mod1”的模块__main__;不是一个包

如何解决此导入错误,同时对类进行pickle处理,以便在其他地方使用?

为了使用相对导入,需要将代码包装在包中。设置并使用
pip-e install
标志将其作为开发模块安装。是对您所面临问题的一个非常深入的解释。

您的类名最好以大写字母开头。from.mod1 import classic\u mod,mod1是一个模块,因此这是不合适的,请使用from mod1 import classic\u mod