App Engine上的Django 1.7" ImportError:没有名为msvcrt的模块"

时间:2014-09-18 14:16:10

标签: python django google-app-engine

我试图在我的Windows机器上运行的Google App Engine开发服务器上将Django升级到1.7版。

尝试加载应用时,我从doango\core\files\locks.py获得以下异常:

ImportError: No module named msvcrt

相关的代码行是:

if os.name == 'nt':
    import msvcrt

我想引发异常是因为App Engine的开发服务器没有提供msvcrt版本,但由于我的开发机器是Windows,os.name仍然是'nt'

是否有解决方案或解决方法?

相关的堆栈跟踪:

 File "...\django\core\files\locks.py", line 30, in <module>
    import msvcrt
 File "D:\Program Files (x86)\Google\google_appengine\google\appengine\tools\devappserver2\python\sandbox.py", line 852, in load_module
    raise ImportError('No module named %s' % fullname)

3 个答案:

答案 0 :(得分:7)

刚刚找到了解决方法。在appengine_config.py中添加以下行:

import os

on_appengine = os.environ.get('SERVER_SOFTWARE','').startswith('Development')
if on_appengine and os.name == 'nt':
    os.name = None

我仍然在寻找一种不太讨厌的解决方案。

答案 1 :(得分:2)

我在使用PyCharm时发现了这个问题。我创建了一个新的Python GAE项目并表示我想要包含Flask。我在启动和运行时遇到了一些小问题,这是最后一个问题:正如@Tzach指出的那样,在运行其中一个GAE / Flask / JetBrains样板时,最终会遇到ImportError: No module named msvcrt。然而,Tzach的黑客并没有为我工作 - 他们必须更改Click库以不同的方式检测主机操作系统。我的解决方案最终成为appengine_config.py中的以下代码:

on_appengine = os.environ.get('SERVER_SOFTWARE','').startswith('Development')

if on_appengine and os.name == 'nt':
  sys.platform = "Not Windows"

它改变的原因是因为看来Click现在正在使用以下代码来检测操作系统:

WIN = sys.platform.startswith('win')

希望有帮助!

答案 2 :(得分:0)

Devserver无法访问系统上的模块。它只查看项目中的模块。这是为了确保如果它在devserver上运行,它将在部署时运行。要么在你的devserver上使用修补版本的Django,要知道操作系统永远不会是&#39; nt&#39;在App Engine上,或者将msvcrt导入到您的项目中,以便在部署时找到并在app.yaml中放置skip_files行,因为在部署到App Engine的非Windows环境时永远不需要它。