簡體   English   中英

無法在Python 2.7.9虛擬環境中導入_winreg

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM