0

EDIT zu importieren versuchen:Kein Modul mit dem Namen service_account wenn PubSub von google.cloud

Das Problem ist, dass ich versuche, ein aktuelles Modul namens Whatever zu importieren aus ouath2client pip Bibliothek ABER Ich habe die eine lokale verwendet Version von ouath2client - wenn ich versuche zu aktualisieren, dass Whatever schlägt fehl.

Deshalb möchte ich ouath2client vom site-packages für pubsub aber das lokale Verzeichnis ouath2client für Whatever Modul verwenden. versucht wie folgt aus:

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) 

Aber noch bin immer ich ImportError: No module named service_account

Der Versuch, ein Pub Unter laufen. immer diese Fehlermeldung:

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 

relevant Pips:

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

im oauth2client Verzeichnis überprüft, aber ich sehe 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 

so weiß ich nicht, wo die /google/cloud/client.py versucht, Import von

Beim Versuch zu impo rt direkt von der Python-Konsole

(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 
>>> 

dann funktioniert es, komisch.

Antwort

0

Die Importe in pubsub werden nicht alle zur gleichen Zeit ausgewertet pubsub wird selbst importiert. Sie werden später zur Laufzeit ausgewertet, nachdem Sie bereits unique_path von sys.path entfernt haben.

Das eigentliche Problem ist, wie man zwei verschiedene Versionen eines Python-Moduls mit dem gleichen Namen importiert, was Python nicht tun würde, ohne auf komplizierte Tricks zurückzugreifen. Da dies in der Regel eine schlechte Idee ist, ist die beste Lösung, Whatever neu zu schreiben, um die neueste Version von oauth2client zu verwenden.

Verwandte Themen