2017-10-31 4 views
2

標準のサポートベクター回帰コンポーネントとフィーチャを作成するカスタムトランスフォーマーを組み合わせたsklearn pipelineを構築しました。このパイプラインは、訓練され、次に漬けられた物体に入れられる(this seems to be the recommended way)。 unpickledオブジェクトは、予測を行うために使用されます。カスタムsklearnパイプラインを維持(ピクル)するための推奨される方法は何ですか?

配布の場合、これはpyinstallerの実行可能ファイルに変換されます。

ユニットテストからunpickled回帰オブジェクトを呼び出すと、正常に動作します。私は予測を行うためにpyInstallerのバイナリを使用しようとすると

しかし、私はで終わる長いstack trace取得:

module = loader.load_module(fullname) File "messagestream.pxd", line 5, in init scipy.optimize._trlib._trlib ImportError: No module named 'scipy._lib.messagestream' 

これはおそらくに、酸洗エラーのいくつかの種類のように感じています酸洗いとpyinstallerとの相互作用。どのようにして私のコードをリファクタリングして、私のカスタムパイプラインが、unpicklingの後に標準のsklearn regressorと同じくらい簡単かつ堅牢に動作するようにすることができますか?

+0

に関連するいくつかの他の隠された輸入品を必要とあなたはjoblibであなたのモデルを漬けていますか? –

+0

いいえ、私はpickleで酸洗していますが、私もjoblibを試しましたが、無駄にしません。 –

+0

誰かが同じ問題を抱えています:https://stackoverflow.com/questions/47055712/error-when-executing-compiled-file-no-module-named-scipy-lib-messagestream –

答えて

3

OK、根本的な原因が酸洗されていない場合がありますが、pyinstallerの「隠れた輸入」の問題ですが、何らかの理由で、私の理由)。

以下は、私のためにすぐに問題を解決:Scipyで次の隠しインポートを追加し.specファイルを編集します。

hiddenimports=['scipy._lib.messagestream'] 

私はまた、他のライブラリ

hiddenimports=['sklearn.neighbors.typedefs', 
       'scipy._lib.messagestream', 
       'pandas._libs.tslibs.timedeltas' ] 
+0

トリッキーに感謝します。私は2017年5月にそれに対処する必要はありませんでした。これは新しいバージョンのバグですか? –

+0

py2exeでも動作します。 – munieq11

関連する問題