dill を評価していますが、このシナリオが処理されるかどうかを知りたいです。Python プロセスでモジュールを正常にインポートするケースがあります。dill を使用してシリアライズし、そのモジュールを含まない別の sys.path を持つ別のプロセスにそのモジュールをロードできますか? 現在、インポートに失敗していますが、何か間違っている可能性があります。
例を次に示します。foo.py モジュールのパスが sys.path にあるこのスクリプトを実行します。
% cat dill_dump.py
import dill
import foo
myFile = "./foo.pkl"
fh = open(myFile, 'wb')
dill.dump(foo, fh)
ここで、PYTHONPATH に foo.py のディレクトリがない場所でこのスクリプトを実行します。
% cat dill_load.py
import dill
myFile = "./foo.pkl"
fh = open(myFile, 'rb')
foo = dill.load(fh)
print foo
次のスタック トレースで失敗します。
Traceback (most recent call last):
File "dill_load.py", line 4, in <module>
foo = dill.load(fh)
File "/home/b/lib/python/dill-0.2.4-py2.6.egg/dill/dill.py", line 199, in load
obj = pik.load()
File "/rel/lang/python/2.6.4-8/lib/python2.6/pickle.py", line 858, in load
dispatch[key](self)
File "/rel/lang/python/2.6.4-8/lib/python2.6/pickle.py", line 1133, in load_reduce
value = func(*args)
File "/home/b/lib/python/dill-0.2.4-py2.6.egg/dill/dill.py", line 678, in _import_module
return __import__(import_name)
ImportError: No module named foo
では、2 つのプロセス間で同じ python パスが必要な場合、python モジュールをシリアル化する意味は何ですか? または、言い換えれば、「import foo」呼び出しを行うよりも、ディル経由で foo をロードする利点はありますか?