ImportError:没有名为move

时间:2018-03-09 06:53:56

标签: python-2.7 google-app-engine google-app-engine-python six

版本

  • Python :2.7.14
  • :1.9.0& 1.11.0(试用了两个
  • 操作系统:mac(10.13.3)& ubuntu(16.04)[试用了]

错误

  

从six.moves导入http_client
  ImportError:没有名为move

的模块

说明

在使用dev_appserver.py在本地系统上运行时在Google应用引擎上运行的随机播放应用程序,导入from six.moves import http_client时出现上述错误

我尝试了什么

导入后,有六个人尝试了dir(six),这表明列表中有moves,但是无法导入,这很奇怪。

six.__version__的输出:1.11.0

如果dir(六)输出

  

['/ opt / tribes-backend','/ opt / tribes-backend / lib1','/ usr / lib / google-cloud-sdk / platform / google_appengine','/ usr / lib / google-cloud -sdk / platform / 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 / gribcio-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 / find3.0.5','/ usr / lib / google-cloud-sdk / platform / google_appengine / lib / setuptools-36.6.0','/ usr / lib / google-cloud-sdk / platform / google_appengine / lib / protocc-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 / we bob-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 / record-packages / google','/ usr / lib / google-cloud-sdk / platform / google_appengine /谷歌']   [ 'BytesIO', '迭代', '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','_ MoveIItems','_ SixMetaPathImporter','作者','内置',' doc ','文件','名称','','路径', '版本','_ add_doc','_ somesertCountEqual','_ somesertRaisesRegex','_ asertRegex','_ 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','move','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']。< / p>

moves内部输出six可以看出,导入时仍然会出错。

花了很多时间来解决这个问题,直到现在还没有任何解决方案。 :(

UPDATE1

错误堆栈跟踪: -

 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

3 个答案:

答案 0 :(得分:3)

根据Google支持小组的跟进,我们发现使用datastoregoogle-cloud-datastore进行通信已被弃用 而是使用ndb来进行数据存储的通信。

记录了使用客户端数据存储库弃用的更新文档here

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

答案 1 :(得分:1)

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

andrewsg在11天前评论:

  

我认为我们已经确定devappserver与六个库有关的问题。您可以尝试解决方法吗?在加载NDB之前,在您的应用程序顶部添加以下行:import six; reload(six),让我知道是否行得通。

答案 2 :(得分:0)

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