我遇到了一些困难部署一个应用程序,我一直在本地开发使用dev_appserver 1.7.6在一个虚拟环境与构建。当我部署时,我的本地dist文件夹也被部署,这会导致与应用引擎提供的库冲突
我的应用程序依赖于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而不是google提供的版本。
我怎样才能在virtualenv中使用pycrypto,并且仍然部署到谷歌应用引擎,而不必从我的skip_files部分注释/取消注释dist/Crypto ?
我只使用了几个月的python,所以我想由于我对环境缺乏经验,我错过了一些明显的东西。
由于我对buildout/virtualenv的误解,我的本地设置非常糟糕。
解决方案是在我的build .cfg中创建两个单独的parts
和recipe = appfy.recipe.gae:app_lib
。一部分用于应用引擎在部署时包含但不在本地应用服务器中的项。这使用主应用程序路径之外的lib-directory
。第二部分也是recipe = appfy.recipe.gae:app_lib
,但它使用的是lib-directory
,位于部署到app引擎的代码文件夹内。