我正在为一个网站开发一个python GAE应用程序,我正在尝试联合登录。
根据Identity Platform choosing guide,网站的最佳解决方案似乎是Google Identity Toolkit (web)。浏览了我可以找到的所有相关文档然后转到教程,我遇到了一个问题 - 安装identity-toolkit-python-client
包失败了C <编译错误与 cffi 库相似,类似于这一个:
# python -m pip install identity-toolkit-python-client
...
gcc -pthread -fno-strict-aliasing -fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -DNDEBUG -fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -DOPENSSL_LOAD_CONF -fPIC -I/usr/include/python2.7 -c src/cryptography/hazmat/bindings/__pycache__/_Cryptography_cffi_a269d620xd5c405b7.c -o build/temp.linux-x86_64-2.7/src/cryptography/hazmat/bindings/__pycache__/_Cryptography_cffi_a269d620xd5c405b7.o
src/cryptography/hazmat/bindings/__pycache__/_Cryptography_cffi_a269d620xd5c405b7.c:2:20: fatal error: Python.h: No such file or directory
#include <Python.h>
^
compilation terminated.
error: command 'gcc' failed with exit status 1
我在为我的linux发行版安装了一些特定的软件包后,最终设法正确安装了软件包,但是这些失败导致了我的实际问题(这些教程非常通用,我无法发现任何有关GAE限制的提示)。
来自GAE python sandbox documentation仅纯python 代码应该出现在GAE应用中:
Python运行时环境的所有代码都必须是纯Python,并且 不包括任何C扩展或其他必须编译的代码。
我没有看到GAE SDK或其第三方库中包含的身份工具包,据我所知,这意味着我必须在自己的应用程序中install it as a 3rd party library。但纯python 代码限制也适用于这些库:
您可以将任何第三方库添加到您的应用程序中,只要它 在“纯Python”(没有C扩展)和其他方面实现 App Engine运行时环境中的函数。
因此标题中的问题。
我错过了什么吗?
感谢。
到目前为止,我正在使用webapp2和jinja2。
答案 0 :(得分:2)
不支持100%,支持第三方库,如PyCrypto,numpy lxml都有&#39; C&#39;基于扩展,但这些都是谷歌直接支持。你无法添加自己不在列表中的内容。
请参阅第三方库文档https://cloud.google.com/appengine/docs/python/tools/libraries27
你必须区分&#34;第三方图书馆&#34; Google支持您自己提供的第三方库。
此外,您还没有说过您正在使用的框架。你可能会发现值得看一下authomatic http://peterhudec.github.io/authomatic/
开箱即用支持:
答案 1 :(得分:2)
Tim Hofman和dsalama的答案都得到了应用,但真正有意义的是这个答案:How to import lib folder within Modules让我意识到第三方libs doc对于模块位于不同目录的应用程序来说并不完全正常(典型的应用程序结构https://cloud.google.com/appengine/docs/python/modules/#Python_Configuration)
基本上,必须根据需要为每个使用第三方库的模块应用销售方案:
lib
目录(或libs本身,取决于所使用的销售方案)必须在每个模块目录中可见/可访问appengine_config.py
文件,其中的销售代码与模块的.yaml
文件并排显示,因为模块无法访问位于应用程序根目录中的文件(如果选择的销售计划依赖于此类文件)答案 2 :(得分:1)
根据Identity Toolkit论坛的this thread,您可以通过包含PyCrypto v2.6或更高版本在App Engine沙箱中使用Identity Toolkit。
为此,请将以下内容添加到app.yaml文件中:
libraries:
- name: pycrypto
version: 2.6