5

版本

  • 蟒蛇:2.7.14
  • :1.9.0 & 1.11.0(都试过了
  • 操作系统: mac(10.13.3) & ubuntu(16.04) [在两者上都试过]

错误

from Six.moves import http_client
ImportError: No module named moves

描述

在谷歌应用程序引擎上运行的烧瓶应用程序中,同时在本地系统上运行它,dev_appserver.py在导入时使用出现上述错误from six.moves import http_client

我试过的

导入六个后尝试dir(six)了其中显示moves列表中有但无法导入它,这很奇怪。

输出six.__version__:1.11.0

如果 dir(6) 则输出

['/opt/tribes-backend', '/opt/tribes-backend/lib1', '/usr/lib/google-cloud-sdk/platform/google_appengine', '/usr/lib/google-cloud-sdk/平台/google_appengine'、'/usr/lib/python2.7'、'/usr/lib/python2.7/lib-dynload'、'/usr/lib/google-cloud-sdk/platform/google_appengine/lib/ssl -2.7.11', '/usr/lib/google-cloud-sdk/platform/google_appengine/lib/grpcio-1.0.0', '/usr/lib/google-cloud-sdk/platform/google_appengine/lib/six -1.9.0', '/usr/lib/google-cloud-sdk/platform/google_appengine/lib/protobuf-3.0.0', '/usr/lib/google-cloud-sdk/platform/google_appengine/lib/enum -0.9.23', '/usr/lib/google-cloud-sdk/platform/google_appengine/lib/futures-3.0.5', '/usr/lib/google-cloud-sdk/platform/google_appengine/lib/setuptools -36.6.0', '/usr/lib/google-cloud-sdk/platform/google_appengine/lib/protorpc-1.0', '/usr/lib/google-cloud-sdk/platform/google_appengine/lib/pytz-2017.2', '/usr/lib /google-cloud-sdk/platform/google_appengine/lib/webapp2-2.3', '/usr/lib/google-cloud-sdk/platform/google_appengine/lib/webob-1.1.1', '/usr/lib/google -cloud-sdk/platform/google_appengine/lib/werkzeug-0.11.10','/usr/lib/google-cloud-sdk/platform/google_appengine/lib/yaml-3.10','/usr/local/lib/python2 .7/dist-packages/enum'、'/usr/lib/google-cloud-sdk/platform/google_appengine/lib/concurrent/concurrent'、'/usr/local/lib/python2.7/dist-packages/concurrent ', '/usr/local/lib/python2.7/dist-packages/google', '/usr/lib/google-cloud-sdk/platform/google_appengine/google'] ['BytesIO', 'Iterator', 'MAXSIZE', 'Module_six_moves_urllib', 'Module_six_moves_urllib_error', 'Module_six_moves_urllib_parse', 'Module_six_moves_urllib_request', 'Module_six_moves_urllib_response', 'Module_six_moves_urllib_robotparser', 'MovedAttribute', 'MovedModule', 'PY2', 'PY3', 'StringIO', '_LazyDescr' , '_LazyModule', '_MovedItems', '_SixMetaPathImporter', '_LazyModule','_MovedItems','_SixMetaPathImporter','_LazyModule','_MovedItems','_SixMetaPathImporter','作者','内置',' doc ','文件','名称','','路径','版本','_add_doc','_assertCountEqual','_assertRaisesRegex','_assertRegex','_func_closure','_func_code','_func_defaults','_func_globals','_import_module','_importer','_meth_func','_meth_self', '_moved_attributes', '_print', '_urllib_error_moved_attributes', '_urllib_parse_moved_attributes', '_urllib_request_moved_attributes', '_urllib_response_moved_attributes', '_urllib_robotparser_moved_attributes', 'absolute_import', 'add_metaclass', 'add_move', 'advance_iterator', 'assertCountEqual', 'assertRaisesRegex ','assertRegex','b','binary_type','byte2int','callable','class_types','create_bound_method','exec_','functools','get_function_closure','get_function_code','get_function_defaults','get_function_globals','get_method_function','get_method_self','get_unbound_function','indexbytes','int2byte','integer_types' , 'iterbytes', 'iteritems', 'iterkeys', 'iterlists', 'itertools', 'itervalues', 'moves', 'next', 'operator', 'print_', 'python_2_unicode_compatible', 'raise_from', ' remove_move'、'reraise'、'string_types'、'sys'、'text_type'、'types'、'u'、'unichr'、'viewitems'、'viewkeys'、'viewvalues'、'with_metaclass'、'wraps']。

从上面的输出可以看出,movessix导入时仍然会出错。

在这方面花了很多时间,但到目前为止还没有解决方案,在这里将不胜感激任何帮助。:(

更新1

错误堆栈跟踪:-

 from google.cloud.datastore import helpers
 File "/opt/tribes-backend/denv/local/lib/python2.7/site-packages/google/cloud/datastore/helpers.py", line 27, in <module>
 from google.cloud._helpers import _datetime_to_pb_timestamp
 File "/opt/tribes-backend/denv/local/lib/python2.7/site-packages/google/cloud/_helpers.py", line 30, in <module>
 from six.moves import http_client
 ImportError: No module named moves
4

3 回答 3

4

对我来说,通过在https://github.com/googleapis/python-ndb/issues/249上关注它解决了这个问题

andrewsg 11天前评论:

我认为我们已经确定了与这六个库相关的 devappserver 问题。您能尝试一下解决方法吗?在加载 NDB 之前,将行添加import six; reload(six)到您的应用程序的顶部,并让我知道这是否有效。

于 2019-12-14T11:09:38.583 回答
3

根据对谷歌支持团队的跟进,我们发现不推荐使用datastoreusing进行通信,google-cloud-datastore而不推荐使用ndb用于通信数据存储的方式。

此处记录了说明使用客户端数据存储库弃用的更新文档

在 python 中开始使用ndb 客户端库的文档记录在此处

于 2018-03-28T05:23:36.723 回答
0

在某些情况下,如果您想在应用程序中使用一些 python 纯库,比如六个,您将需要使用第三方库。按照此处的说明,添加第三方库,直到命令pip install -t lib -r requirements.txt. 在您的 requirements.txt 文件中添加six==1.11.0. 它为我解决了这个问题。

于 2018-03-12T13:08:49.537 回答