[英]Unable to import _winreg in Python 2.7.9 virtual environment
我在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'
>>>
為什么會這樣? 我該怎么做才能解決這個問題?
正如文檔所說,模塊_winreg
存在是為了“將Windows注冊表API暴露給Python”。
App Engine不提供“Windows注冊表API”(也不提供任何其他Windows特定的API)。 因此,它的沙箱塊會嘗試import
模塊 - 請注意,在堆棧跟蹤結束時,App Engine SDK的模塊sandbox.py
中會故意引發該異常。
Python的“虛擬環境”在這里不起作用 - 它都是關於App Engine的。
請說明一旦部署了GAE應用程序,您要嘗試使用_winreg
完成_winreg
任務 - 假設它已部署到Linux服務器(盡管GAE運行時不提供特定於Linux的API :-),因此沒有Windows注冊表API附近的任何地方......
在實施修復程序之前,Google提供的解決方法如下:
<sdk_root>\\google\\appengine\\tools\\devappserver2\\python\\sandbox.py
_WHITE_LIST_C_MODULES = [xxx]
的定義 '_winreg',
'_ctypes',
如果這不成功,請運行python -m pip install google-cloud
我認為問題是GAE不知道你處於開發模式,我想因為SERVER_SOFTWARE變量被設置為不以“Dev”開頭的東西。
如果您執行以下代碼(在調用任何GAE庫之前),它應該解決問題:
import os
os.environ['SERVER_SOFTWARE'] = 'Dev'
注意:確保在開始生產之前刪除此代碼。
幾天前我遇到了這個問題。
如上所述,Windows上的GAE沙箱阻止了一些例程或庫,甚至是內置的例程,因為它是開發到類Unix平台的。
我向Google小組開了一個問題,他們通過了一個解決方法:
https://issuetracker.google.com/issues/38290292
這種解決方法效果很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.