Ningún módulo llamado _mysql – Google App Engine & Django

En primer lugar estoy trabajando en Mac (Yosemite) .

He creado un proyecto simple de Django con Google App Engine . Estoy usando Cloud SQL en producción y MySQL en un entorno de desarrollo como se recomienda en los documentos. El proyecto utiliza virtualenv en mi máquina dev, por supuesto.

Puedo ejecutar el proyecto con el comando runerver integrado de Django sin ningún problema, e incluso si lo implemento en GAE todo está bien.

Sin embargo, si ejecuto el servidor de desarrollo con el iniciador de GAE, aparece un error cada vez que bash cargar una página:

ImproperlyConfigured: Error loading MySQLdb module: No module named _mysql 

Instalé la misma versión de MySQLdb que tiene GAE. Actualmente su 1.2.4. MySQLdb está disponible para GAE SDK, así que no tengo idea de por qué no se puede importar _mysql.

Finalmente he encontrado una solución.

Simplemente agregar MySQLdb a su biblioteca GAE no es suficiente. MySQLdb intenta importar _mysql, que es un archivo .so o .c, dependiendo de la versión de MySQLdb que use. Parece que importarlos directamente no funciona correctamente, supongo. Tal vez porque es un archivo C de bajo nivel y, como se indica en los documentos, GAE no admite ningún tipo de extensiones C. Si conoce una explicación mejor, por favor, comparta con nosotros en la sección de comentarios.

La solución:

Primero que todo tuve que renombrar _mysql.so . El mío es sólo mysql.so ahora.

Luego cree un archivo llamado _mysql.py en el mismo directorio y ponga este código en él:

 def __bootstrap__(): global __bootstrap__, __loader__, __file__ import sys, pkg_resources, imp __file__ = pkg_resources.resource_filename(__name__,'mysql.so') #point to your renamed _mysql.so __loader__ = None; del __bootstrap__, __loader__ imp.load_dynamic(__name__,__file__) __bootstrap__() 

GAE debería importar ahora MySQLdb sin errores.