Я пытаюсь интегрировать проект 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
но теперь un pickling классы терпит неудачу со следующим сообщением
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