部署到Google App Engine时,忽略buildout $ app / dist /文件夹中的pycrypto

时间:2013-04-03 15:42:10

标签: google-app-engine virtualenv buildout

我遇到了一些困难,部署了一个我在本地使用dev_appserver 1.7.6在buildu开发的virtualenv中开发的应用程序。当我部署时,我的本地dist文件夹也被部署,这导致与app引擎提供的库冲突

我的应用程序依赖于pycrypto所以为了在本地运行它我已经将pycrypto添加到我的buildout.cfg中。这将在$ app / dist / Crypto中安装pycrypto。一切都在本地运行良好和花花公子,但当我部署$ app / dist文件夹时也部署。然后App Engine在尝试导入DES3时抱怨ImportError

File "/path/to/my/app/dist/Crypto/Cipher/DES3.py", line 67, in <module>
    from Crypto.Cipher import _DES3
ImportError: dynamic module does not define init function (init_DES3)

您可以在错误日志中看到它正在尝试在$ app / dist中使用pycrypto而不是谷歌提供的版本。

如何在virtualenv中使用pycrypto并仍然部署到Google App Engine,而无需从我的skip_files部分评论/取消注释dist / Crypto?

我现在只使用python工作了几个月,所以我认为由于缺乏环境经验,我遗漏了一些明显的东西。

1 个答案:

答案 0 :(得分:0)

事实证明,由于我对buildout / virtualenv的误解,我的本地设置非常破碎。

解决方案是在buildout.cfg中创建两个单独的partsrecipe = appfy.recipe.gae:app_lib。其中一部分是应用引擎在部署时包含但不在本地应用服务器中的项目。这使用主应用程序路径之外的lib-directory。第二部分也是recipe = appfy.recipe.gae:app_lib,但它在部署到应用引擎的代码文件夹中使用了lib-directory