J’exécute une application de moteur d’application dans un environnement virtuel sous Windows 7 64 bits, python 2.7.9 x64.
Voici la stacktrace:
p_system = platform.system() File "C:\Python27\lib\platform.py", line 1310, in system return uname()[0] File "C:\Python27\lib\platform.py", line 1206, in uname release,version,csd,ptype = win32_ver() File "C:\Python27\lib\platform.py", line 597, in win32_ver import _winreg File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\devappserver2\python\sandbox.py", line 945, in load_module raise ImportError('No module named %s' % fullname) ImportError: No module named _winreg
Cependant, cela fonctionne très bien avec cli (en dehors de venv):
Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\Users\Admin>python Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win 32 Type "help", "copyright", "credits" or "license" for more information. >>> import _winreg >>> import platform >>> platform.system() 'Windows' >>>
Pourquoi cela arrive-t-il? Que puis-je faire pour résoudre ce problème?
Le module _winreg
, comme disent les documents , existe pour “exposer l’API de registre Windows à Python”.
App Engine ne fournit pas une “API de registre Windows” (ni aucune autre API spécifique à Windows). Par conséquent, son sandbox bloque les tentatives d’ import
du module – notez qu’à la fin de votre trace de stack, l’exception est délibérément sandbox.py
dans le module sandbox.py
du SDK App Engine.
“Virtual env” de Python ne joue aucun rôle ici – il s’agit d’App Engine.
Veuillez préciser quelle tâche vous essayez d’accomplir avec _winreg
une fois que votre application GAE est déployée – supposons qu’elle est déployée sur des serveurs Linux (bien que l’environnement d’exécution GAE ne fournisse pas non plus d’API spécifique à Linux 🙂 API partout dans le quartier …
La solution de contournement fournie par Google, jusqu’à ce qu’un correctif soit implémenté, est la suivante:
\google\appengine\tools\devappserver2\python\sandbox.py
_WHITE_LIST_C_MODULES = [xxx]
'_winreg',
'_ctypes',
Si cela ne réussit pas, exécutez python -m pip install google-cloud
Je pense que le problème est que GAE ne sait pas que vous êtes en mode de développement, je suppose parce que la variable SERVER_SOFTWARE est définie sur quelque chose qui ne commence pas par “Dev”.
Si vous exécutez le code suivant (avant d’appeler une bibliothèque GAE), il doit résoudre le problème:
import os os.environ['SERVER_SOFTWARE'] = 'Dev'
Remarque: Assurez-vous que ce code est supprimé avant de passer en production.
J’ai eu ce problème il y a quelques jours.
Comme indiqué plus haut, le sandbox GAE de Windows bloque certaines routines ou bibliothèques, même intégrées, car il est développé sur une plate-forme de type Unix.
J’ai ouvert un problème à Google Team et ils ont réussi une solution de contournement:
https://issuetracker.google.com/issues/38290292
Cette solution de contournement a bien fonctionné.