No se puede importar _winreg en el entorno virtual de Python 2.7.9

Estoy ejecutando una aplicación de motor de aplicaciones en un entorno virtual en Windows 7 64bit, Python 2.7.9 x64.

Aquí está el 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 

Sin embargo, funciona bien desde cli (fuera 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' >>> 

¿Por qué pasó esto? ¿Qué puedo hacer para arreglar esto?

    El módulo _winreg , como dicen los documentos , existe para “exponer la API de registro de Windows a Python”.

    App Engine no proporciona una “API de registro de Windows” (ni ninguna otra API específica de Windows). Por lo tanto, sus bloques de sandbox intentan import el módulo; tenga en cuenta, al final de su seguimiento de stack, que la excepción se produce deliberadamente en el módulo sandbox.py del sandbox.py de App Engine.

    El “env virtual” de Python no tiene nada que ver aquí, se trata de App Engine.

    _winreg qué tarea está intentando realizar con _winreg una vez que se implementa su aplicación GAE; suponga que se implementa en servidores Linux (aunque el tiempo de ejecución de GAE no proporciona API específicas para Linux :-), por lo que no existe un Registro de Windows API en cualquier parte del barrio …

    La solución proporcionada por Google, hasta que se implementa una solución, es la siguiente:

    • Vaya a: \google\appengine\tools\devappserver2\python\sandbox.py
    • Encuentra la definición de _WHITE_LIST_C_MODULES = [xxx]
    • Agregue las siguientes dos líneas a la lista:

    '_winreg',

    '_ctypes',

    Si esto no tiene éxito, ejecute python -m pip install google-cloud

    Creo que el problema es que GAE no es consciente de que estás en modo de desarrollo, supongo que porque la variable SERVER_SOFTWARE está configurada para algo que no comienza con “Dev”.

    Si ejecuta el siguiente código (antes de llamar a cualquier biblioteca GAE), debería solucionar el problema:

     import os os.environ['SERVER_SOFTWARE'] = 'Dev' 

    Nota: asegúrese de eliminar este código antes de pasar a producción.

    Tuve este problema hace unos días.

    Como se dijo anteriormente, el sandbox de GAE en Windows bloquea algunas rutinas o bibliotecas, incluso una incorporada, porque está desarrollado para una plataforma similar a Unix.

    Abrí un problema para el equipo de Google y pasaron una solución:

    https://issuetracker.google.com/issues/38290292

    Esa solución funcionó bien.