web-dev-qa-db-ja.com

GSpread ImportError:oauth2client.service_accountという名前のモジュールがありません

テクニカルマーケターになるコースをフォローしていて、GSpreadでGoogleスプレッドシートを管理する方法を学ぼうとしています。 http://gspread.readthedocs.io/en/latest/oauth2.html のドキュメントをフォローしました。上記の2番目のURLの手順に従い、次のコードでドキュメントを実行しました。

import gspread
from oauth2client.service_account import ServiceAccountCredentials

scope = ['https://spreadsheets.google.com/feeds']

credentials = ServiceAccountCredentials.from_json_keyfile_name('DFS Google Sheets Data Imports-7205de852ff7.json', scope)

gc = gspread.authorize(credentials)

wks = gc.open("Authority Scraper").sheet1
wks.update_cell(1,2,"Hello World!")

それから、ターミナルでエラーが発生します:from oauth2client.service_account import ServiceAccountCredentials ImportError:no module name a oauth2client.service_account

ターミナルエラーのプリントアウト

誰か助けてください。 oath2client.service_accountという名前の他のNoモジュールでの回答は私には機能していません。ありがとう!

10
Ryan Bonhardt

このコマンドを実行するとうまくいきました-Sudo pip install --upgrade oauth2client

Oauth2clientライブラリからこれを取得しました github repo

16
kevthanewversi

この議論 によると、

これは、OS X El Capitanにはすでに6つの1.4.1がインストールされており、アンインストールしようとすると、システム整合性保護ではrootでさえこれらのディレクトリを変更できないため、アンインストールする権限がないためです。

回答で言及されているいくつかの回避策の中で、試してみる価値があるかもしれませんpip install --ignore-installed sixシステムのsixパッケージのアンインストールの試みを回避します。

3
Jacques Gaudin

ライブラリに複数のフォルダがあるかどうかを確認することで、エラーを修正できます。

C:\Python27\Lib\site-packages\oauth2client
C:\Program Files (x86)\Google\Google_Appengine\lib\google-api-python-client\oauth2client

フォルダの1つを削除するか、コンパイラでライブラリパスを変更するだけです。

このトピックについて私が作成したビデオへのリンクは次のとおりです。

修正方法: "service_accountという名前のモジュールがありません" -Python

1
virtualdvid

だから私もこの問題に遭遇しました、そしてそれは私にとってパスの問題であることになりました。確かに、これは少し遠いです(すべての開発環境が異なるため)が、他の誰かに役立つ場合に備えて、ここにこれを記述します。

TLDR何かがあなたの$PYTHONPATHをいじっていないことを確認してください。

Pythonで「インポート」を行うと、pythonはsys.pathでパッケージをチェックします。このリストには優先順位があります(つまり、パッケージがリスト内の以前のパスで見つかった場合)。 、その後、そのパッケージが使用されます)。

私の場合、しばらく前にappengineの処理を行ったときに、$PYTHONPATHが変更されたようです。結局のところ、私のappengineにはかなり古い独自のoauth2clientlibがありました。

その結果、pythonがfrom oauth2client.service_accountを試行したとき、oauth2clientではなくappengineでoauth2clientを取得していました(結果として$PYTHONPATHが変更されました)。

インポート呼び出しの前にsys.pathを出力することで、これが発生しているかどうかを確認できます。

import sys
print sys.path
from oauth2client.service_account import ServiceAccountCredentials

私の場合、優先されていた一連のappengineパスをはっきりと見ることができました。これにより、~/.bash_profileを確認することになりました。ここで、次の行を見つけました。

export PYTHONPATH=$PYTHONPATH::$LOCAL_APPENGINE_HOME/lib/:$LOCAL_APPENGINE_HOME/lib/yaml/:$LOCAL_APPENGINE_HOME:$LOCAL_APPENGINE_HOME/lib/webapp2-2.5.2/`

それをコメントし、新しいシェルを開始し、すべてがダンディに機能しました。

1
Billy