2017-07-13 1 views
1

J'ai un script python qui utilise le pickle que je cours depuis des semaines. J'ai récemment installé dropbox afin que je puisse exécuter le script sur la machine A, pickle les données à dropbox, puis charger les données de la boîte de dépôt sur la machine B. Donc, j'avais l'habitude d'écrire dans un fichier dans le chemin du script, maintenant je écrire dans un fichier séparé synchronisé par dropbox.Python: pickle crée une erreur d'importation de module

Quand je vais à charger les données, je reçois l'erreur suivante:

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

Cependant, cette ligne avant fonctionne très bien:

import pandas as pd 

En fait, si je lance le script qui ya le dumping (plutôt que de charger) des données, il fonctionne également avec succès.

J'ai également vérifié que le chemin est correct en utilisant sys.path.

Quel pourrait être le problème?

+0

Il est appelé depuis pickle.load (f) – trob

+0

@SamCraig: non, pickle charge des objets via une référence (module, nom). Vous ne stockez pas la source d'un type, vous stockez simplement où vous pouvez le charger à partir de la prochaine fois. –

+0

@SamCraig: mais dans ce cas un objet a été décapé qui indique qu'il réside dans le module 'pd._libs'. Apparemment, ce module n'est pas disponible sur l'autre machine. –

Répondre

0

Comme mentionné dans les commentaires, il s'agit d'un problème de version pandas. Votre fichier de pickle a été créé en décapant des objets contenant une version plus récente ou pandas, et le démontage du système ce fichier contient une ancienne version de pandas.

Pour être plus précis, pandas._libs d'abord paru dans:

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).

... qui apparaît d'abord dans la version 0.20. Il va de soi que votre fichier pickle a été créé avec une version de pandas> = 0.20, et le système unpickle a la version < 0.20.