【问题标题】:PyCrypto on Google App Engine (1.7.0) with Python 2.7 on Mac OS X 10.8 causes ImportErrorGoogle App Engine (1.7.0) 上的 PyCrypto 和 Mac OS X 10.8 上的 Python 2.7 导致 ImportError
【发布时间】:2012-08-03 02:39:50
【问题描述】:

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

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

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

可能可以编辑或修补 GAE 代码,但我对 GAE 的代码还不够熟悉,因此无法自如地执行此操作。我看到的所有建议都是针对 Python2.5 和 Mac OS X

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

【问题讨论】:

标签: google-app-engine pycrypto


【解决方案1】:

这是我不得不从事的疯狂:

  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. /Application/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/中的dev_appserver_import_hook.py应用到comment 1 of Issue 1627中建议的补丁,即添加

    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 的 GeneratePythonPaths 调用中将所有引用从 'Crypto' 更改为 _CryptoBase

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

  4. 重启项目。

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


注意 — 自补丁 1.7.4 released 14 Dec. 2012 起,此问题似乎已得到修复。

【讨论】:

  • 这仍然是 GAE 1.7.2 中的一个问题
  • 您错过了更改行的步骤:ALLOWED_SITE_PACKAGE_FILES = set( path # os.path.normcase(os.path.abspath(os.path.join( # os.path.dirname(os.__file__), 'site-packages', path))) 编辑:哎呀,cmets 在堆栈溢出时不能有换行符...您需要注释掉路径操作,只需将路径输出到设置构造函数。您链接的问题 1627 中的补丁有这个。
  • 谢谢@Dylan。我已将答案更改为 wiki - 在我有机会查看此内容之前还需要一段时间,但请随时更新答案。
猜你喜欢
  • 2011-12-28
  • 2013-05-03
  • 2012-09-20
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 2013-10-28
相关资源
最近更新 更多