2

我在 Windows 7 64 位、python 2.7.9 x64 的虚拟环境中运行应用引擎应用程序。

这是堆栈跟踪:

    p_system = platform.system()
  File "C:\Python27\lib\platform.py", line 1310, in system
    return uname()[0]
  File "C:\Python27\lib\platform.py", line 1206, in uname
    release,version,csd,ptype = win32_ver()
  File "C:\Python27\lib\platform.py", line 597, in win32_ver
    import _winreg
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\devappserver2\python\sandbox.py", line 945, in load_module
    raise ImportError('No module named %s' % fullname)
  ImportError: No module named _winreg

但是,它在 cli (在 venv 之外)上工作得很好:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\Admin>python
Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import _winreg
>>> import platform
>>> platform.system()
'Windows'
>>>

为什么会这样?我能做些什么来解决这个问题?

4

4 回答 4

6

_winreg正如文档所说, Module的存在是为了“将 Windows 注册表 API 暴露给 Python”。

App Engine 不提供“Windows 注册表 API”(也不提供任何其他 Windows 特定的 API)。因此,它的沙盒会阻止对该模块的尝试import——请注意,在堆栈跟踪的末尾,异常是sandbox.py在 App Engine SDK 的模块中故意引发的。

Python 的“虚拟环境”在这里没有任何作用——这完全是关于 App Engine 的。

请说明您在_winreg部署 GAE 应用程序后尝试完成的任务——假设它已部署到 Linux 服务器(尽管 GAE 运行时也不提供 Linux 特定的 API:-),因此没有 Windows 注册表 API在附近的任何地方...

于 2015-02-22T01:46:38.780 回答
4

在实施修复之前,Google 提供的解决方法如下:

  • 去:<sdk_root>\google\appengine\tools\devappserver2\python\sandbox.py
  • 找到的定义_WHITE_LIST_C_MODULES = [xxx]
  • 将以下两行添加到列表中:

'_winreg',

'_ctypes',

如果这不成功,请运行python -m pip install google-cloud

于 2017-06-15T14:03:03.313 回答
1

我认为问题在于 GAE 不知道您处于开发模式,我想是因为 SERVER_SOFTWARE 变量设置为不以“Dev”开头的东西。

如果您执行以下代码(在调用任何 GAE 库之前),它应该可以解决问题:

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

注意:确保在投入生产之前删除此代码。

于 2015-04-24T15:49:53.040 回答
1

几天前我遇到了这个问题。

如上所述,Windows 上的 GAE 沙箱会阻止一些例程或库,甚至是内置的,因为它是针对类 Unix 平台开发的。

我向 Google 团队提出了一个问题,他们通过了一个解决方法:

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

该解决方法效果很好。

于 2017-05-16T12:46:35.033 回答