“ImportError: No module named _ssl” with dev_appserver.py from Google App Engine

后端 未结 7 1895
误落风尘
误落风尘 2020-11-27 13:55

Background

\"In the Python runtime, we\'ve added support for the Python SSL Library, so you can now open secure connections to remote servic

相关标签:
7条回答
  • 2020-11-27 14:06

    You can test if ssl is available at your local system by opening a python shell and typing import ssl. If no error appears then the problem is something else, otherwise you don't have the relevant libraries installed on your system. If you are using a Linux operating system try sudo apt-get install openssl openssl-devel or the relevant instructions for your operating system to install them locally. If you are using windows, these are the instructions.

    0 讨论(0)
  • 2020-11-27 14:07

    I had this problem because I wasn't vendoring ssl in my app.yaml file. I know the OP did that, but for those landing here for the OP's error, it's worth making sure lines like the following are in your app.yaml file:

    libraries:
    - name: ssl
      version: latest
    
    0 讨论(0)
  • 2020-11-27 14:09

    I added the code to appengine_config.py as listed by Spain Train, but had to also add the following code as well to get this to work:

    phttplib = os.path.join(os.path.dirname(real_os_src_path), 'httplib.py')
    imp.load_source('httplib', phttplib)
    
    0 讨论(0)
  • 2020-11-27 14:17

    Stumbled upon this thread trying to work with Apples Push notification service and appengine... I was able to get this working without any monkey patching, by adding the SSL library in my app.yaml, as recommended in the official docs, hope that helps someone else :)

    0 讨论(0)
  • 2020-11-27 14:20

    For the current GAE version (1.8.0 at least until 1.8.3), if you want to be able to debug SSL connections in your development environment, you will need to tweak a little bit the gae sandbox:

    • add "_ssl" and "_socket" keys to the dictionary _WHITE_LIST_C_MODULES in /path-to-gae-sdk/google/appengine/tools/devappserver2/python/sandbox.py
    • Replace the socket.py file provided by google in /path-to-gae-sdk/google/appengine/dis27 from the socket.py file from your Python framework.

    IMPORTANT: Tweaking the sandbox environment might end up with functionality working on your local machine but not in production (for example, GAE only supports outbound sockets in production). I will recommend you to restore your sandbox when you are done developing that specific part of your app.

    0 讨论(0)
  • 2020-11-27 14:26

    I had to use a slightly different approach to get this working in CircleCI (unsure what peculiarity about their venv config caused this):

    appengine_config.py

    import os
    
    if os.environ.get('SERVER_SOFTWARE', '').startswith('Development'):
        import imp
        import os.path
        import inspect
        from google.appengine.tools.devappserver2.python import sandbox
    
        sandbox._WHITE_LIST_C_MODULES += ['_ssl', '_socket']
        # Use the system socket.
    
        real_os_src_path = os.path.realpath(inspect.getsourcefile(os))
        psocket = os.path.join(os.path.dirname(real_os_src_path), 'socket.py')
        imp.load_source('socket', psocket)
    
    0 讨论(0)
提交回复
热议问题