Python-клиент Google API: «из почтового индекса six.moves ImportError: модуль не перемещается» - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь использовать API Google Sheets в своем коде Python 2.7 с помощью googleapiclient, но получаю следующую ошибку: "from six.moves import zip ImportError: модуль с именами не перемещается ".

Я использую Python 2.7.10 на Mac.

Моя программа построена с использованием Webapp2, развернута в Google AppEngine и подключена к Google Datastore.

Я использую лучшие практики Google для использования сторонних библиотек, используя requirements.txt, lib/ и appengine_config.py, описанные здесь: https://cloud.google.com/appengine/docs/standard/python/tools/using-libraries-python-27#installing_a_third-party_library

Я попытался перечислить шесть как связанную библиотеку в моем app.yaml

Я пытался поиграть с разными версиями six и google-api-python-client

Я попробовал решения, предлагаемые здесь:

1) ImportError: модуль с именами не перемещается

2) Google App Engine: из шести потоков импорта http_client нет модуля с именами перемещений

На что обратить внимание:

Я могу сделать успешный вызов API Google Sheets из моей оболочки Python.

Я попробовал другой, более грубый подход; скачайте google-api-client-gae-1.2.zip из https://code.google.com/archive/p/google-api-python-client/downloads и разархивируйте его в моем корневом каталоге. Это потребовало импортировать apiclient в мой код вместо googleapiclient, и, хотя у него не было проблем с импортом Six.moves, он выдал пропущенные ошибки API Key. Я полагаю, что эти ошибки не будут проблемой, если я решу описанную выше ошибку импорта six.moves, так как у меня есть набор переменных среды GOOGLE_APPLICATION_CREDENTIALS, который google_api_python_client будет использовать.

Мой код:

from googleapiclient import discovery

class SpreadsheetProcessor:

    def __init__(self, spreadsheet_id, range_):
        service = discovery.build('sheets', 'v4')
        request = service.spreadsheets().values().get(
            spreadsheetId=spreadsheet_id, range=range_)
        response = request.execute()
        self.results = [value[0] for value in response['values']]

Мой пункт замораживания:

autopep8==1.4.3
cachetools==3.0.0
certifi==2018.11.29
chardet==3.0.4
enum34==1.1.6
fancycompleter==0.8
futures==3.2.0
google-api-core==1.7.0
google-api-python-client==1.7.7
google-auth==1.6.2
google-auth-httplib2==0.0.3
google-cloud-core==0.29.1
google-cloud-datastore==1.7.3
googleapis-common-protos==1.5.6
grpcio==1.18.0
httplib2==0.12.0
idna==2.8
linecache2==1.0.0
pdbpp==0.9.3
protobuf==3.6.1
pyasn1==0.4.5
pyasn1-modules==0.2.3
pycodestyle==2.4.0
Pygments==2.3.1
pyrepl==0.8.4
pytz==2018.9
requests==2.21.0
rsa==4.0
six==1.12.0
traceback2==1.4.0
uritemplate==3.0.0
uritemplate.py==3.0.2
urllib3==1.24.1
wmctrl==0.3

Моя полная трассировка стека:

ERROR    2019-01-20 11:52:23,705 wsgi.py:263]
Traceback (most recent call last):
  File "/Users/muzzialdean/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/Users/muzzialdean/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "/Users/muzzialdean/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 85, in LoadObject
    obj = __import__(path[0])
  File "/Users/muzzialdean/Muzzi/tech-tests/ghostr/ghostr.py", line 3, in <module>
    from models import Ghost, GhostDatabase
  File "/Users/muzzialdean/Muzzi/tech-tests/ghostr/models.py", line 2, in <module>
    from googleapiclient import discovery
  File "/Users/muzzialdean/Muzzi/tech-tests/ghostr/lib/googleapiclient/discovery.py", line 21, in <module>
    from six.moves import zip
ImportError: No module named moves
INFO     2019-01-20 11:52:23,715 module.py:861] default: "GET / HTTP/1.1" 500 -

1 Ответ

0 голосов
/ 21 января 2019

Модуль six является одной из встроенных сторонних библиотек в среде выполнения App Engine Python 2.7. Единственная доступная версия - 1.9.0, но эта версия имеет подмодуль six.moves:

$ python
Python 2.7.14 (default, Sep 13 2018, 17:12:41)
[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from six.moves import zip
>>> import six
>>> six.__version__
'1.9.0'

Похоже, у вас может быть старая версия six в каталоге lib или, возможно, файл в вашем проекте с именем six.py?

...