代码之家  ›  专栏  ›  技术社区  ›  danielo

Python相对路径-ModuleNotFoundError

  •  3
  • danielo  · 技术社区  · 6 年前

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

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

    初始化 .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)
    

    测试.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
    

    如何解决这个导入错误,同时pickle类以便在其他地方使用?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Alexander Ejbekov    6 年前

    为了使用相对导入,您需要将代码包装在一个包中。设置 setup script 使用 pip -e install This 是对你所面临问题的一个非常深入的解释。