Нет модуля с именем service_account при попытке импортировать pubsub из google.cloud

РЕДАКТИРОВАТЬ:

Проблема в том, что я пытаюсь импортировать из ouath2client Библиотека пипов, но у меня есть текущий модуль под названием Whatever кто использовал локальную версию ouath2client - если я попытаюсь обновить это Whatever выходит из строя.

Поэтому я хочу использовать ouath2client от site-packages за pubsub но локальный каталог ouath2client за Whatever модуль. попробовал так:

unique_path = '/root/.virtualenvs/simple_worker/lib/python2.7/site-packages'
unique_path = '/root/.virtualenvs/simple_worker/lib/python2.7/site-packages'
sys.path.insert(0, unique_path)
from google.cloud import pubsub
sys.path.remove(unique_path)

Но все же я получаю ImportError: No module named service_account

Попытка запустить паб Sub. получить эту ошибку:

  File "/proj/Backend/WorkerScripts/runRecognizerAlgo/run.py", line 748, in <module>
    from google.cloud import pubsub
  File "/root/.virtualenvs/app_engine_workers/local/lib/python2.7/site-packages/google/cloud/pubsub/__init__.py", line 27, in <module>
    from google.cloud.pubsub.client import Client
  File "/root/.virtualenvs/app_engine_workers/local/lib/python2.7/site-packages/google/cloud/pubsub/client.py", line 19, in <module>
    from google.cloud.client import JSONClient
  File "/root/.virtualenvs/app_engine_workers/local/lib/python2.7/site-packages/google/cloud/client.py", line 17, in <module>
    from oauth2client.service_account import ServiceAccountCredentials
ImportError: No module named service_account

соответствующие пункты:

gapic-google-pubsub-v1==0.10.1
google-cloud-pubsub==0.21.0
grpc-google-pubsub-v1==0.10.1
oauth2client==3.0.0

проверил в oauth2client каталог, но я вижу service_account

ls  /root/.virtualenvs/app_engine_workers/lib/python2.7/site-packages/oauth2client/
__init__.py   _openssl_crypt.py       _pycrypto_crypt.py   clientsecrets.py   crypt.pyc           service_account.pyc  util.pyc
__init__.pyc  _openssl_crypt.pyc      _pycrypto_crypt.pyc  clientsecrets.pyc  file.py             tools.py
_helpers.py   _pure_python_crypt.py   client.py            contrib            file.pyc            tools.pyc
_helpers.pyc  _pure_python_crypt.pyc  client.pyc           crypt.py           service_account.py  util.py

так что я не знаю где /google/cloud/client.py пытается импортировать из

При попытке импортировать прямо из консоли Python

(app_engine_workers)root@worker-test-docker-delete2:/proj/Backend/Framework/Workers# p
Python 2.7.3 (default, Mar 13 2014, 11:03:55)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from google.cloud import pubsub
>>> 

тогда это работает, странно.

1 ответ

Импорт в pubsub не все оцениваются одновременно pubsub сам импортируется. Они оцениваются позже, во время выполнения, после того, как вы уже удалили unique_path от sys.path,

Реальная проблема заключается в том, как импортировать две разные версии модуля Python с одинаковым именем, что Python не позволит вам сделать, не прибегая к каким-то сложным приемам. Так как это вообще плохая идея, идеальным решением будет переписать Whatever использовать самую последнюю версию oauth2client,

Другие вопросы по тегам