2012-08-03 14 views
7

Estoy tratando de hacer que PyCrypto trabaje con Google App Engine, y tengo una larga descripción de un problema que he encontrado que se informa como issue 7925 para Google App Engine.PyCrypto en Google App Engine (1.7.0) con Python 2.7 en Mac OS X 10.8 causa ImportError

Básicamente, no conozco una forma sensata de instalar PyCrypto en Mac OS X 10.8 de tal forma que dev_appserver.py lo use, salvo la solución de poner Crypto/ en el directorio raíz del proyecto.

Lamentablemente, parece que surgió un problema que hace que un proyecto se cuelgue cuando el proyecto se implementa con Crypto/ en la raíz del proyecto.

Puede ser posible editar o poner en parche el código GAE, pero no estoy lo suficientemente familiarizado con el código de GAE para estar cómodo haciendo eso. Todas las sugerencias que he visto fueron para Python2.5 y Mac OS X < 10.8.

Le agradecería ideas sobre formas alternativas y sensatas de hacer que PyCrypto trabaje con el servidor de aplicaciones de desarrollo GAE en Mac OS X 10.8.

+1

Tuve un problema similar, así es como lo resolví: http://stackoverflow.com/questions/29350204/app-engine-importerror-no-module-named-crypto-hash/29354265#29354265 – JackNova

Respuesta

4

Esta es la locura que he tenido para participar en:

  1. Eliminar todas las versiones de PyCrypto

  2. Descargar PyCrypto v2.3 de https://github.com/dlitz/pycrypto/tags e instalar con

    dlitz-pycrypto-7e141bd/$ python setup.py build 
    dlitz-pycrypto-7e141bd/$ sudo python setup.py install 
    

    (versión 2.6 bloqueos con un paquete no blockalgo)

  3. Aplicar a dev_appserver_import_hook.py en /Application/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/ el parche se sugiere en comment 1 of Issue 1627, es decir, añadir

    try: 
        import Crypto as _CryptoTest 
        _CryptoBase = os.path.dirname(_CryptoTest.__file__).replace(
        os.path.join(os.path.dirname(os.__file__), 'site-packages'), 
        "") # removes preceding slash 
        del _CryptoTest 
    except ImportError: 
        logging.info("No Crypto could be imported") 
        _CryptoBase = "Crypto" 
    

    alrededor de la línea 314

    continuación, modificar las líneas ALLOWED_SITE_PACKAGES de

    ALLOWED_SITE_PACKAGE_FILES = set(
        os.path.normcase(os.path.abspath(os.path.join(
        os.path.dirname(os.__file__), 'site-packages', path))) 
    

    a

    ALLOWED_SITE_PACKAGE_FILES = set(
        path 
    

    y cambie todas las referencias de 'Crypto' a _CryptoBase en las llamadas GeneratePythonPaths para ALLOWED_SITE_PACKAGES.

    (Me uno es esperar si el uso de la línea dev_appserver orden es decir,/usr/local/google_appengine El dev_appserver_import_hook.py vería modificado allí)

  4. reiniciar el proyecto.

Obviamente, uno debe enjuagar y repetir el parche cada vez que se actualice Google App Engine.


Nota - Este problema parece haber sido fijado a partir del parche 1.7.4 released 14 Dec. 2012.

+0

Esto continúa ser un problema en GAE 1.7.2 –

+1

Se perdió el paso de cambiar las líneas: 'ALLOWED_SITE_PACKAGE_FILES = set ( ruta # os.path.normcase (os.path.abspath (os.path.join ( # os). path.dirname (os .__ file__), 'site-packages', path))) 'EDITAR: gah, los comentarios no pueden tener nuevas líneas en el desbordamiento de la pila ... necesitas comentar la manipulación de la ruta y simplemente dar salida a la ruta el constructor del set. El parche en el Issue 1627 que vinculó tiene esto. – Dylan

+0

Gracias @Dylan. He cambiado la respuesta a una wiki, será un poco antes de que tenga un chanc e para ver esto, pero no dude en actualizar la respuesta. –

Cuestiones relacionadas