2012-08-03 2 views
7

J'essaie d'obtenir PyCrypto pour travailler avec Google App Engine, et j'ai une longue description d'un problème que j'ai rencontré qui est rapporté comme issue 7925 pour Google App Engine.PyCrypto sur Google App Engine (1.7.0) avec Python 2.7 sur Mac OS X 10.8 causes ImportError

Essentiellement, je ne sais pas d'une façon raisonnable d'installer PyCrypto sous Mac OS X 10.8 de telle sorte que dev_appserver.py va l'utiliser - autre que la solution de contournement de mettre Crypto/ dans le répertoire racine du projet.

Malheureusement, un problème semble avoir surgi qui fait planter un projet lorsque le projet est déployé avec Crypto/ dans la racine du projet.

Il peut être possible d'éditer ou de monkeypatch le code GAE, mais je ne suis pas assez familier avec le code de GAE pour être confortable à faire cela. Toutes les suggestions que j'ai vues étaient pour Python2.5 et Mac OS X < 10.8. Je vous serais reconnaissant d'avoir réfléchi à d'autres moyens judicieux pour que PyCrypto fonctionne avec le serveur d'applications de développement GAE sur Mac OS X 10.8.

+1

J'ai eu un problème similaire, voici comment je l'ai résolu: http://stackoverflow.com/questions/29350204/app-engine-importerror-no-module-named-crypto-hash/29354265#29354265 – JackNova

Répondre

4

C'est la folie que j'ai dû se livrer à:

  1. Supprimer toutes les versions de PyCrypto

  2. Télécharger PyCrypto v2.3 de https://github.com/dlitz/pycrypto/tags et installer avec

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

    (la version 2.6 rechigne avec un paquet non blockalgo)

  3. Appliquer à dev_appserver_import_hook.py dans /Application/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/ le patch suggéré dans comment 1 of Issue 1627, à savoir ajouter

    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" 
    

    autour de la ligne 314

    puis modifier les lignes 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))) 
    

    à

    ALLOWED_SITE_PACKAGE_FILES = set(
        path 
    

    et remplacez toutes les références de 'Crypto' par _CryptoBase dans les appels GeneratePythonPaths pour ALLOWED_SITE_PACKAGES.

    (je prévois si l'on utilise dev_appserver à partir de la ligne de commande à-dire/usr/local/google_appengine, le dev_appserver_import_hook.py il serait modifié)

  4. de redémarrage du projet.

De toute évidence, il faut rincer et répéter le correctif à chaque mise à jour de Google App Engine.


Remarque - Cette question semble avoir été fixé au timbre 1.7.4 released 14 Dec. 2012.

+0

Cela continue être un problème dans GAE 1.7.2 –

+1

Vous avez manqué l'étape de changement des lignes: 'ALLOWED_SITE_PACKAGE_FILES = set ( chemin # os.path.normcase (os.path.abspath (os.path.join ( # os. path.dirname (os .__ fichier__), 'site-packages', chemin))) 'EDIT: gah, les commentaires ne peuvent pas avoir de sauts de ligne sur le débordement de la pile ... vous devez commenter la manipulation du chemin et juste le chemin de sortie vers Le correctif dans le numéro 1627 que vous avez lié a ceci: – Dylan

+0

Merci @Dylan J'ai changé la réponse à un wiki - ça va être un peu avant d'avoir un chanc e à regarder cela, mais s'il vous plaît n'hésitez pas à mettre à jour la réponse. –

Questions connexes