Google App Engine“没有名为 pwd 的模块”

Posted

技术标签:

【中文标题】Google App Engine“没有名为 pwd 的模块”【英文标题】:Google App Engine 'No module named pwd' 【发布时间】:2015-04-24 10:27:24 【问题描述】:

我能够很好地运行我的 Google App Engine 项目(我正在使用 Python Flask 开发网络应用程序),但是当我将系统从 Ubuntu 12.04 升级到 14.04 时。 App Engine 项目在本地系统上变得无响应,而在生产环境中运行良好。我还保持我的项目更新,将我的源代码放在 github 上,所以我删除了所有内容并再次从我的 github 帐户中克隆了一个新的存储库。但是当我运行该项目时,它给了我以下错误,如果有人在此之前遇到此错误,请帮助我。

我使用这个命令来运行我的项目

$ dev_appserver.py src/

并在终端输出此错误

WARNING  2015-02-23 06:13:02,341 simple_search_stub.py:1115] Could not read search indexes from /tmp/appengine.practical-now-720.chitrank/search_indexes
INFO     2015-02-23 06:13:02,347 api_server.py:172] Starting API server at: http://localhost:60268
INFO     2015-02-23 06:13:02,368 dispatcher.py:186] Starting module "default" running at: http://localhost:8080
INFO     2015-02-23 06:13:02,369 admin_server.py:118] Starting admin server at: http://localhost:8000
ERROR    2015-02-23 06:13:05,655 wsgi.py:263] 
Traceback (most recent call last):
  File "/home/chitrank/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/home/chitrank/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "/home/chitrank/google_appengine/google/appengine/runtime/wsgi.py", line 85, in LoadObject
    obj = __import__(path[0])
  File "/home/chitrank/Documents/Google_App_Engine/GoogleCloudPlatform/uscore-firstsubmit/uscore/src/run.py", line 5, in <module>
    import application
  File "/home/chitrank/Documents/Google_App_Engine/GoogleCloudPlatform/uscore-firstsubmit/uscore/src/application/__init__.py", line 47, in <module>
    import urls
  File "/home/chitrank/Documents/Google_App_Engine/GoogleCloudPlatform/uscore-firstsubmit/uscore/src/application/urls.py", line 10, in <module>
    from application import views
  File "/home/chitrank/Documents/Google_App_Engine/GoogleCloudPlatform/uscore-firstsubmit/uscore/src/application/views.py", line 49, in <module>
    import requests
  File "/home/chitrank/Documents/Google_App_Engine/GoogleCloudPlatform/uscore-firstsubmit/uscore/src/lib/requests/__init__.py", line 58, in <module>
    from . import utils
  File "/home/chitrank/Documents/Google_App_Engine/GoogleCloudPlatform/uscore-firstsubmit/uscore/src/lib/requests/utils.py", line 19, in <module>
    from netrc import netrc, NetrcParseError
  File "/usr/lib/python2.7/netrc.py", line 7, in <module>
    import pwd
  File "/home/chitrank/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 898, in load_module
    raise ImportError('No module named %s' % fullname)
ImportError: No module named pwd
INFO     2015-02-23 06:13:05,710 module.py:718] default: "GET /_ah/warmup HTTP/1.1" 500 -

如果有人解决了这个问题,请帮我解决以下问题。

【问题讨论】:

你能在普通 Python shell 中import pwd 吗? "ImportError: No module named pwd" but it exists的可能重复 @Dmitry 是的,我可以从通用 python Shell 运行import pwd @rnevius 上述问题无法解决我的问题 在此处查看解决方案***.com/a/40475261/7049567 以切换到旧版本的 oauth2client。 【参考方案1】:

google_appengine/google/appengine/tools/devappserver2/python/sandbox.py 中有_WHITE_LIST_C_MODULES 列表,添加'pwd' 对我有用。

Google 实际上是在沙盒中运行的。由于生产环境没有问题,旧的 GAE SDK 将支持pwd 导入,但他们即将删除它。

【讨论】:

我已将pwd 添加到数组中。但在部署后问题仍然存在。 @loretoparisi 似乎谷歌删除了向后兼容性,因为它已被弃用。【参考方案2】:

您使用什么版本的请求?

你能不能说明如下:

import requests
requests.version
'x.x.x'
$ dpkg -l | grep requests

附带说明:您使用的请求版本可能有点旧,我建议您尽可能升级到 2.3.4 或最新版本并试一试!

您可以查看以下链接:

[1]https://github.com/kennethreitz/requests/blob/v2.2.1/requests/utils.py#L19

[2]https://github.com/kennethreitz/requests/pull/1709

【讨论】:

以上是关于Google App Engine“没有名为 pwd 的模块”的主要内容,如果未能解决你的问题,请参考以下文章

连接 Google App Engine 和 Google Compute Engine

Google App Engine Flexible 和 Google Container Engine 之间的区别?

如何在 Google Cloud App Engine 上使用 PubSub 创建订阅者,该订阅者通过 Publisher 从 Google Cloud App Engine Flex 收听消息?

将 Meteor 部署到 Google App Engine 2017

Google BigQuery 的 Google App Engine 授权

Google App Engine 通过内部网络与 Compute Engine 通信