web-dev-qa-db-fra.com

Erreur quickstart.py de l'API Google KeyError: '_module'

Utiliser l'API Gmail. Le fichier secret de mon client est téléchargé et fonctionne pour Ruby. Lorsque j'essaie la version quickstart.py (python), le message d'erreur suivant s'affiche:

File "quickstart.py", line 70, in <module>
    main()
  File "quickstart.py", line 55, in main
    credentials = get_credentials()
  File "quickstart.py", line 38, in get_credentials
    credentials = store.get()
  File "/Library/Python/2.7/site-packages/oauth2client/client.py", line 374, in get
    return self.locked_get()
  File "/Library/Python/2.7/site-packages/oauth2client/file.py", line 79, in locked_get
    credentials = Credentials.new_from_json(content)
  File "/Library/Python/2.7/site-packages/oauth2client/client.py", line 281, in new_from_json
    module = data['_module']
KeyError: '_module'

Je n'ai pas du tout changé le fichier, je viens d'ajouter le fichier client_secret.json à ce répertoire de travail et d'installer également le client google-api-python. Mon code python est venu d'ici: https://developers.google.com/gmail/api/quickstart/python

30
ElioRubens

oauth2client tente de charger les informations d'identification à partir d'un fichier JSON avec une structure incorrecte.

Le client Ruby utilise peut-être un format de fichier différent, mais je serais surpris. Êtes-vous sûr de ne pas avoir enregistré client_secret.json en tant que ~/.credentials/gmail-quickstart.json accidentellement?

Quoi qu'il en soit, la suppression de ~/.credentials/gmail-quickstart.json et la ré-authentification généreront un nouveau fichier d'informations d'identification avec la structure appropriée.

11
Matt

Essayez de remplacer creds = store.get() par creds = None temporairement. Si cela fonctionne, vous pouvez refactoriser votre code pour toujours commencer par l'instanciation des informations d'identification basée sur le flux. Cela a fonctionné pour moi. Il semble que les échantillons de Google ne soient pas synchronisés avec leur oauth2client.

7
skirill

J'ai résolu ce problème en déplaçant le fichier client_secret.json dans le même répertoire que le fichier py essayant de le lire (quickstart.py), le mien étant sur le bureau alors que j'avais enregistré le fichier json dans Documents. J'ai sauvé le JSON sur le bureau aussi et garçon, il a volé!.

Je ne sais pas pourquoi cela ne fonctionne pas quand ils sont dans des répertoires différents, la définition d'un chemin d'accès personnalisé ne m'aide pas.

1
simic0de

J'apprends moi-même Python et j'ai eu un problème similaire, mais avec l'exemple de l'API Calendar . Il s'est avéré que c'était une faute de frappe en ce qui concerne la portée. 

## Typo - Invalid definition
SCOPES = 'https://ww.googleapies.com/auth/calendar.readonly'
## Correct Value for SCOPE
SCOPES = 'https://www.googleapis.com/auth/calendar'

En outre, la réponse de Matt m'aide à me diriger dans la bonne direction. Le gmail-quickstart.json n'est pas la même chose que le client_secret.json. Le client_secret.json vous permet de demander un jeton OAuth2. Alors que gmail-quickstart.json contient le jeton émis et les méta-données qui lui sont associées. Le fichier gmail-quickstart.json n'est pas créé tant que vous n'êtes pas connecté. 

Une dernière pensée, pour pouvoir vous connecter avec succès, l’application quickstart.py a lancé une instance de mon navigateur Web (Firefox) et est passée à l’écran de connexion de Google. Pour que Firefox fonctionne correctement, je devais d'abord définir ma variable DISPLAY correctement.

$ export DISPLAY=:0
$ xhost +
access control disabled, clients can connect from any Host
1
Randy B.