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 pickle 化は次のメッセージで失敗します
with open(fname) as infile: self.clzA = cPickle.load(infile)
ImportError: No module named packageA.moduleA
cPickle
では、モジュールの定義が明らかに見えないのはなぜですか。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