7

我正在尝试让 PyC​​rypto 与 Google App Engine 一起使用,并且我对我遇到的一个问题进行了冗长的描述,该问题被报告为 Google App Engine的问题 7925 。

从本质上讲,我不知道在 Mac OS X 10.8 上安装 PyCrypto 的合理方法是dev_appserver.py如何使用它——除了放入Crypto/项目根目录的解决方法。

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

可能可以编辑或修补 GAE 代码,但我对 GAE 的代码不够熟悉,因此无法做到这一点。我看到的所有建议都是针对 Python2.5 和 Mac OS X < 10.8 的。

我将不胜感激有关让 PyC​​rypto 在 Mac OS X 10.8 上与 GAE 开发应用服务器一起工作的替代、明智的方法。

4

1 回答 1

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
    

    (版本 2.6 没有blockalgo包)

  3. 适用dev_appserver_import_hook.pyIssue 1627 评论 1 中/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"
    

    314号线附近

    然后修改 ALLOWED_SITE_PACKAGES 行

    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
    

    并在对 ALLOWED_SITE_PACKAGES的调用中将所有引用从 更改'Crypto'为。_CryptoBaseGeneratePythonPaths

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

  4. 重新启动项目。

显然,每当更新 Google App Engine 时,都必须冲洗并重复补丁。


注意— 此问题似乎已在2012 年 12 月 14 日发布的补丁 1.7.4中得到修复。

于 2012-08-03T12:26:46.760 回答