0

AttributeError:「モジュール」オブジェクトには属性「GoogleCredentials」がありません

ローカルホストで実行されている appengine アプリがあります。実行するいくつかのテストがあり、remote_api を使用して db 値を確認したいと考えています。訪問してremote_apiにアクセスしようとすると:

'http://127.0.0.1:8080/_ah/remote_api' 

私は得る:

"This request did not contain a necessary header" 

しかし、ブラウザで動作します。

テストから remote_api を呼び出そうとすると、

remote_api_stub.ConfigureRemoteApiForOAuth('localhost:35887','/_ah/remote_api')

エラーが発生します:

Error
Traceback (most recent call last):
  File "/home/dan/src/gtup/test/test_users.py", line 38, in test_crud
    remote_api_stub.ConfigureRemoteApiForOAuth('localhost:35887','/_ah/remote_api')
  File "/home/dan/Programs/google-cloud-sdk/platform/google_appengine/google/appengine/ext/remote_api/remote_api_stub.py", line 747, in ConfigureRemoteApiForOAuth
    credentials = client.GoogleCredentials.get_application_default()
AttributeError: 'module' object has no attribute 'GoogleCredentials'

Googleクラウド全体を再インストールしようとしましたが、うまくいきませんでした.

client.py を開くと

google-cloud-sdk/platform/google_appengine/lib/google-api-python-client/oauth2client/client.py 

これは remote_api_stub.py で使用されていますが、内部に GoogleCredentials クラスがないことがわかります。

GoogleCredentials クラスは存在しますが、次の場所にある他の client.py ファイル内にあります。

google-cloud-sdk/platform/google_appengine/lib/oauth2client/oauth2client/client.py
google-cloud-sdk/platform/gsutil/third_party/oauth2client/oauth2client/client.py
google-cloud-sdk/platform/bq/third_party/oauth2client/client.py
google-cloud-sdk/lib/third_party/oauth2client/client.py

私の app.yaml は次のようになります。

application: myapp
version: 1
runtime: python27
api_version: 1
threadsafe: true

libraries:
- name: webapp2
  version: latest

builtins:
- remote_api: on

handlers:
- url: /.*
  script: main.app

これは appengine 内の間違ったインポート/バグですか? または、ユニットテスト内で remote_api を使用するために何か間違ったことをしていますか?

4

2 に答える 2

0

私の評判でコメントを投稿できないため、コメントの代わりに回答します -

Macでこれらのタイプのスクリプトを実行すると、同様のことが起こりました。アプリ エンジン ランチャーと一緒に gcloud がインストールされている場合は特に、関数を実際にチェックするファイルについて PATH 変数が混乱することがあります。Mac の場合は、~/.bash_profile ファイルを編集/開いてこれを修正することをお勧めします (または、Linux の場合は ~/.bashrc の可能性があります)。たとえば、私の Mac では、PATH 変数を修正する次の行があります。

export PATH="/usr/local/bin:$PATH"
export PYTHONPATH="/usr/local/google_appengine:$PYTHONPATH

これらは基本的に、python / コマンドラインが PATH (または PYTHONPATH) 内の何かの前に /usr/local/bin (または PYTHONPATH 行の場合は /usr/local/google_appengine) を検索するようにします。

PATH 変数は、プロンプトに入力したときにコマンド ラインが Python ファイルをチェックする場所です。PYTHONPATH は、Python ファイルが実行時にロードするモジュールを見つける場所です。

于 2016-02-22T19:34:09.983 に答える
0

フォルダーを置き換えることでこの問題を解決しました:

../google-cloud-sdk/platform/google_appengine/lib/google-api-python-client/oauth2client

と:

../google-cloud-sdk/platform/google_appengine/lib/oauth2client/oauth2client

google-api-python-client フォルダーに含まれるものには、必要な Class: GoogleCredentials がクライアント ファイルに含まれるようになりました。

その後、接続に 2 番目の問題が発生したため、次のように電話する必要があります。

remote_api_stub.ConfigureRemoteApiForOAuth('localhost:51805','/_ah/remote_api', False)

ポートは毎回変更され、サーバーが再起動されることに注意してください。

于 2016-03-12T22:11:29.177 に答える