Python HTTPS使用“获取”;“请求”;Google应用程序引擎中的模块出现故障

Python HTTPS使用“获取”;“请求”;Google应用程序引擎中的模块出现故障,python,python-3.x,google-app-engine,python-3.6,python-module,Python,Python 3.x,Google App Engine,Python 3.6,Python Module,我想在Google App Engine Python标准运行时环境中使用请求模块 引自: 通过将库复制到应用程序目录中,您可以使用纯Python代码的第三方库,这些库没有C扩展。如果第三方库已经内置,并与运行时捆绑在一起,您可以使用该库,而无需将其复制到应用程序中。 第三方库必须作为没有C扩展的纯Python代码实现。如果复制到应用程序目录,它们将计入文件配额,因为库将与应用程序代码一起上载到App Engine 请求未与GAE绑定,因此我根据说明将其添加到我的应用程序文件夹中 请求需要一些G

我想在Google App Engine Python标准运行时环境中使用
请求
模块

引自:

通过将库复制到应用程序目录中,您可以使用纯Python代码的第三方库,这些库没有C扩展。如果第三方库已经内置,并与运行时捆绑在一起,您可以使用该库,而无需将其复制到应用程序中。

第三方库必须作为没有C扩展的纯Python代码实现。如果复制到应用程序目录,它们将计入文件配额,因为库将与应用程序代码一起上载到App Engine

请求
未与GAE绑定,因此我根据说明将其添加到我的应用程序文件夹中

请求
需要一些GAE没有附带的其他模块,因此我将它们全部添加到我的应用程序文件夹中:

  • certifi
  • chardet
  • idna
  • urllib3
另一个问题出现了。我的请求转到具有
https://
协议的。以下是错误:

SSLError: HTTPSConnectionPool(host='api.stackexchange.com', port=443): Max retries exceeded with url: /2.2/1?site=stackoverflow (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",))
ssl
模块内置于GAE Python运行时中,因此我在
app.yaml
中添加了以下内容:

libraries:
- name: webapp2
  version: latest

- name: ssl
  version: latest
它不起作用。我犯了和以前一样的错误。我将SSL模块文件夹复制到我的应用程序目录中,并在
main.py
中导入了SSL,但现在它引发了一个异常,要求安装另一个模块:

File "/Users/williamqin/Projects/stackpromo/ssl/__init__.py", line 61, in <module>
import _ssl2          # if we can't import it, let the error propagate
ImportError: No module named _ssl2
File”/Users/williamqin/Projects/stackpromo/ssl/_init__.py“,第61行,在
导入_ssl2#如果无法导入它,则让错误传播
ImportError:没有名为_ssl2的模块
我在网上到处搜索
\u ssl2
Python模块,但在任何地方都找不到


如何正确使用Google App Engine中的
请求
模块?

在GAE标准中为python 2.7进行设置是一件痛苦的事情。它涉及到使用AppEngine的beta版python ssl库和其他一些零碎的东西

我相信你会面临一些不同的python3。这是我让它工作的关键点:

请求2.18.2

请参见工具带0.7.0

appengine\u config.py中执行以下操作:

from requests_toolbelt.adapters import appengine as requests_toolbelt_appengine

# Use the App Engine Requests adapter. This makes sure that Requests uses
# URLFetch.
requests_toolbelt_appengine.monkeypatch()
app.yaml
中有以下内容:

env_variables:
  GAE_USE_SOCKETS_HTTPLIB : 'true'


libraries:
- name: ssl
  version: "2.7.11"
- name: pycrypto
  version: "2.6"
此外,这使它在生产中对我起作用,但在本地主机上不起作用。除了包含所有第三方库的本地
lib
目录外,我还必须设置一个名为
localhost\u libs
的额外目录,并在
appengine\u config.py
中执行此操作:

vendor.add('lib')

if os.environ.get('SERVER_SOFTWARE', '').startswith('Development'):
    vendor.add('localhost_libs')
我在哪里有pycrypto


而且,在很长一段时间里,每个人都必须这样做(最终在dev_appserver中发生了一些改变,使其无法工作):

在GAE标准中为python 2.7进行设置是一件痛苦的事情。它涉及到使用AppEngine的beta版python ssl库和其他一些零碎的东西

我相信你会面临一些不同的python3。这是我让它工作的关键点:

请求2.18.2

请参见工具带0.7.0

appengine\u config.py中执行以下操作:

from requests_toolbelt.adapters import appengine as requests_toolbelt_appengine

# Use the App Engine Requests adapter. This makes sure that Requests uses
# URLFetch.
requests_toolbelt_appengine.monkeypatch()
app.yaml
中有以下内容:

env_variables:
  GAE_USE_SOCKETS_HTTPLIB : 'true'


libraries:
- name: ssl
  version: "2.7.11"
- name: pycrypto
  version: "2.6"
此外,这使它在生产中对我起作用,但在本地主机上不起作用。除了包含所有第三方库的本地
lib
目录外,我还必须设置一个名为
localhost\u libs
的额外目录,并在
appengine\u config.py
中执行此操作:

vendor.add('lib')

if os.environ.get('SERVER_SOFTWARE', '').startswith('Development'):
    vendor.add('localhost_libs')
我在哪里有pycrypto


另外,很长一段时间以来,每个人都必须这样做(最终,dev_appserver中的某些更改使其无法工作):

您是否将Flex环境与Python 3一起使用?这些库内置在标准环境中,而不是Flex环境中。因此,您需要将其添加到您的项目中,正如您在第二次尝试中所说的。你的目录树是什么样子的?你是在使用Flex环境和Python3吗?这些库内置在标准环境中,而不是Flex环境中。因此,您需要将其添加到您的项目中,正如您在第二次尝试中所说的。你的目录树是什么样子的?