首页 > 解决方案 > 无法在不同的目录中加载腌制的自定义类,这是怎么回事?如何导入所需的类?

问题描述

我正在尝试在不同的目录中加载一个腌制的自定义类,但我遇到了两个错误。

文件结构如下

/project
|
|--/data
|
|--/src
|  
|  |--__init__.py
|
|  |--/calculate
|     |--__init__.py
|     |--run_calc.py
|     |--calc_class.py
|
|  |--/plot
|     |--__init__.py
|     |--run_plotter

run_calc.py中,我通过导入自定义类来计算并腌制它,如下所示

import pickle
from cust_class import animal

instance_animal = animal(specie, age)

with open('../../data/picked_class.pickle', 'wb') as f:
    pickle.dump(instance_animal, f)

cust_class.py是这样

class animal:
    def__init__(self, specie, age)
    self.specie = specie
    self.age = age

现在,当我尝试将 run_plotter 中的泡菜加载到如上所示的不同目录中时,出现以下错误。

run_plotter.py

with open('../../data/pickled_class.pickle', 'rb') as f:
    loaded = pickle.load(f)

控制台输出

$python run_plotter.py
ImportError: No module named cust_class

现在,如果我将 calc_class.py 复制并粘贴到 run_plotter.py 旁边的 /plot 目录中,pickle.load 就可以工作了。但是,如果我尝试在 run_plotter.py 中导入calc_class.py,如下所示

from ..parser import bsig_class

给我错误

$python run_plotter.py
ValueError: attempted relative import beyond top-level package

两个问题是,pickle 是否需要导入一个类才能将类加载到不同的目录中?如何导入此类,以便可以将泡菜文件加载到不同的目录中?

标签: python-3.xpython-importpickle

解决方案


推荐阅读