2012-08-03 17 views
7

Sto cercando di far funzionare PyCrypto con Google App Engine e ho una lunga descrizione di un problema che ho riscontrato che viene segnalato come issue 7925 per Google App Engine.PyCrypto su Google App Engine (1.7.0) con Python 2.7 su Mac OS X 10.8 causa ImportError

In sostanza, non so di un modo ragionevole per l'installazione pycrypto su Mac OS X 10.8 in modo tale che dev_appserver.py lo userà - altro che la soluzione di mettere Crypto/ nella directory principale del progetto.

Sfortunatamente sembra appena spuntato un problema che causa l'arresto anomalo di un progetto quando il progetto viene distribuito con Crypto/ nella radice del progetto.

Potrebbe essere possibile modificare o monkeypatch il codice GAE, ma non ho familiarità con il codice GAE per essere comodo farlo. Tutti i suggerimenti che ho visto erano per Python2.5 e Mac OS X < 10.8.

Sarei grato per i pensieri su modi alternativi e sensati per far funzionare PyCrypto con lo sviluppatore di app di sviluppo GAE su Mac OS X 10.8.

+1

Ho avuto un problema simile, ecco come ho risolto: http://stackoverflow.com/questions/29350204/app-engine-importerror-no-module-named-crypto-hash/29354265#29354265 – JackNova

risposta

4

Questa è la follia che ho dovuto impegnarsi in:

  1. Eliminare tutte le versioni di pycrypto

  2. Scarica pycrypto v2.3 da https://github.com/dlitz/pycrypto/tags e installare con

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

    (versione 2.6 con pacchetto no blockalgo)

  3. Applicare a dev_appserver_import_hook.py in /Application/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/ patch suggerito comment 1 of Issue 1627, cioè aggiungere

    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" 
    

    intorno alla linea 314

    quindi modificare le linee ALLOWED_SITE_PACKAGES da

    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 
    

    e modificare tutti i riferimenti da 'Crypto' a _CryptoBase nelle chiamate GeneratePythonPaths per ALLOWED_SITE_PACKAGES.

    (mi aspetterei se uno è utilizzando dev_appserver dalla riga di comando cioè/usr/local/google_appengine, il dev_appserver_import_hook.py verrebbe modificato lì)

  4. Riavviare il progetto.

Ovviamente si deve risciacquare e ripetere la patch ogni volta che viene aggiornato Google App Engine.


Nota - Questo problema sembra essere stato risolto a partire dal cerotto 1.7.4 released 14 Dec. 2012.

+0

Questa continua essere un problema in GAE 1.7.2 –

+1

Si è perso il passaggio di modifica delle righe: 'ALLOWED_SITE_PACKAGE_FILES = set ( percorso # os.path.normcase (os.path.abspath (os.path.join ( # os. path.dirname (os .__ file__), 'site-packages', percorso))) 'EDIT: gah, i commenti non possono avere newlines su overflow dello stack ... è necessario commentare la manipolazione del percorso e solo il percorso di output per il costruttore del set. La patch nel numero 1627 che hai collegato ha questo: – Dylan

+0

Grazie @Dylan Ho cambiato la risposta ad un wiki - sarà un po 'prima che io abbia un chanc e a guardare questo, ma per favore sentitevi liberi di aggiornare la risposta. –

Problemi correlati