Unable to import _winreg in Python 2.7.9 virtual environment

前端 未结 4 1418
执念已碎
执念已碎 2020-12-11 11:40

I\'m running an app engine application in a virtual environment on windows 7 64bit, python 2.7.9 x64.

Here\'s the stacktrace:

    p_system = platform         


        
相关标签:
4条回答
  • 2020-12-11 12:10

    I had this problem a few days ago.

    As said above, the GAE sandbox on Windows blocks some routines or libraries, even built-in one, because it is developed to Unix-like platform.

    I opened an issue to Google Team and they passed a workaround:

    https://issuetracker.google.com/issues/38290292

    That workaround worked well.

    0 讨论(0)
  • 2020-12-11 12:12

    The workaround provided by Google, until a fix is implemented, is as follows:

    • Go to: <sdk_root>\google\appengine\tools\devappserver2\python\sandbox.py
    • Find the definition of _WHITE_LIST_C_MODULES = [xxx]
    • Add the following two lines to the list:

    '_winreg',

    '_ctypes',

    If this does not succeed, run python -m pip install google-cloud

    0 讨论(0)
  • 2020-12-11 12:19

    Module _winreg, as the docs say, exists to "expose the Windows registry API to Python".

    App Engine does not supply a "Windows registry API" (nor any other Windows-specific API). Therefore, its sandbox blocks attempts to import the module -- note, at the end of your stack trace, that the exception is deliberately raised in module sandbox.py of the App Engine SDK.

    Python's "virtual env" plays no part here -- it's all about App Engine.

    Please clarify what task you're trying to accomplish with _winreg once your GAE app is deployed -- assume it's deployed to Linux servers (although the GAE runtime doesn't supply Linux-specific APIs either:-), so there is no Windows Registry API anywhere in the neighborhood...

    0 讨论(0)
  • 2020-12-11 12:20

    I think that the problem is that GAE is not aware that you are in development mode, I suppose because the SERVER_SOFTWARE variable is set to something not starting with "Dev".

    If you execute the following code (before calling any GAE library) it should fix the issue:

    import os
    os.environ['SERVER_SOFTWARE'] = 'Dev'
    

    Note: Make sure this code is removed before going to production.

    0 讨论(0)
提交回复
热议问题