我正在尝试将Project A
同事构建的项目集成到另一个 python 项目中。现在这位同事没有在他的代码中使用相对导入,而是使用了
from packageA.moduleA import ClassA
from packageA.moduleA import ClassB
并因此用cPickle
. 为了整洁,我想隐藏他 ( Project A
) 在我的项目中构建的包。然而,这会改变定义在packageA
. 没问题,我将使用重新定义导入
from ..packageA.moduleA import ClassA
from ..packageA.moduleA import ClassB
但现在取消腌制课程失败并显示以下消息
with open(fname) as infile: self.clzA = cPickle.load(infile)
ImportError: No module named packageA.moduleA
那么为什么cPickle
显然看不到模块defs。我需要将根目录添加packageA
到系统路径吗?这是解决问题的正确方法吗?
该cPickled
文件看起来像
ccopy_reg
_reconstructor
p1
(cpackageA.moduleA
ClassA
p2
c__builtin__
object
p3
NtRp4
旧的项目层次结构是这样的
packageA/
__init__.py
moduleA.py
moduleB.py
packageB/
__init__.py
moduleC.py
moduleD.py
我想把所有这些都放在一个WrapperPackage
MyPackage/
.. __init__.py
.. myModuleX.py
.. myModuleY.py
WrapperPackage/
.. __init__.py
.. packageA/
.. __init__.py
.. moduleA.py
.. moduleB.py
.. packageB/
.. __init__.py
.. moduleC.py
.. moduleD.py