在Mac OS X 10.8上使用Python 2.7的Google App Engine(1.7.0)上的PyCrypto会导致ImportError

时间:2012-08-03 02:39:51

标签: google-app-engine pycrypto

我正在努力让PyCrypto与Google App Engine合作,我对我遇到的一个问题进行了详细描述,该问题报告为Google App Engine的 issue 7925

基本上,我不知道在Mac OS X 10.8上以dev_appserver.py将使用它的方式安装PyCrypto的合理方法 - 除了将Crypto/放入项目根目录的解决方法。目录

不幸的是,当项目在项目的根目录中部署Crypto/时,似乎刚刚出现问题导致项目崩溃。

可以对GAE代码进行编辑或monkeypatch,但我对GAE的代码不太熟悉,以便做到这一点。我见过的所有建议都是针对Python2.5和Mac OS X< 10.8。

对于让PyCrypto在Mac OS X 10.8上使用GAE开发应用程序服务器的其他合理方法的想法,我将不胜感激。

1 个答案:

答案 0 :(得分:4)

这是我不得不参与的疯狂:

  1. 删除所有版本的PyCrypto

  2. https://github.com/dlitz/pycrypto/tags下载PyCrypto v2.3并安装

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

    (带有blockalgo包的2.6版本)

  3. dev_appserver_import_hook.py/Application/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/建议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" 中建议的补丁,即添加

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

    第314行

    然后从

    修改ALLOWED_SITE_PACKAGES行
    ALLOWED_SITE_PACKAGE_FILES = set(
        path
    

    'Crypto'

    并在_CryptoBase调用ALLOWED_SITE_PACKAGES时将所有引用从GeneratePythonPaths更改为{{1}}。

    (我希望如果从命令行使用dev_appserver,即/ usr / local / google_appengine,则会在那里修改dev_appserver_import_hook.py)

  4. 重启项目。

  5. 显然,只要Google App Engine更新,就必须冲洗并重复修补补丁。


    注意 - 此问题似乎已在修补程序comment 1 of Issue 1627中修复。