Python相对路径-ModuleNotFoundError
我需要对已实例化的python类进行pickle,因此需要使用相对路径。我使用的是Python版本3.6.6。以下是项目结构和代码的示例: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):
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