2017-07-13 4 views
1

私は数週間実行してきたpickleを使用するpythonスクリプトを持っています。私は最近Dropboxをインストールして、マシンAでスクリプトを実行し、データをドロップボックスにpickleし、ドロップボックスからマシンBにデータをロードします。スクリプトのパスにあるファイルに書き込んでいました。 dropboxによって同期された別のファイルに書き込みます。Python:pickleがモジュールインポートエラーを生成する

私はデータをロードするために行くとき、私は次のエラーを取得する:

data = pickle.load(f) 
ModuleNotFoundError: No module named 'pandas._libs' 

しかし、この従来のラインが正常に動作します:実際に

import pandas as pd 

、私はダンプだスクリプトを実行した場合(読み込むのではなく)データを読み込むと、正常に実行されます。

また、sys.pathを使用してパスが正しいことを確認しました。

何が問題なのですか?

+0

これはpickle.load(f) – trob

+0

から呼び出されています@SamCraig:いいえ、pickleはオブジェクトを(モジュール、名前)参照でロードします。あなたはタイプのソースを保存しないで、次回からロードできる場所を保存するだけです。 –

+0

@SamCraig:この場合、オブジェクトは 'pd._libs'モジュールに存在することを示すピクルされています。明らかに、そのモジュールは他のマシンで利用できません。 –

答えて

0

コメントに記載されているとおり、これはpandasバージョンの問題です。あなたのpickleファイルは新しいバージョンまたはpandasを含むオブジェクトをpicklingして作成され、そのファイルをアンパックするシステムにはpandasという古いバージョンが含まれています。最初のバージョン0.20に表示されます

commit 648ae4f03622d8eafe1ca3b833bd6a99f56bece4 Author: Jeff Reback Date: Tue Mar 7 18:21:18 2017 -0500

BLD: consolidate remaining extensions moves extensions to pandas/_libs, which holds the extension code and also the generated builds (as its importable).

...:

は、より正確には、 pandas._libsは、最初に登場しました。これは、あなたのpickleファイルが pandas> = 0.20のバージョンで作成され、unpickleシステムのバージョンが< 0.20であるという理由になります。

関連する問題