0

EDIT:Нет модуль с именем 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

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

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 пытается импорт от

При попытке impo rt прямо с пульта python

(app_engine_workers)[email protected]:/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 
>>> 

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

ответ

0

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

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