19

Google App Engine 用の最初のアプリを開発するための環境として、Eclipe+PyDev を使い始めました。Eclipse は、このチュートリアルに従って構成されます。

memcache を使い始めるまで、すべてが機能していました。PyDev はエラーを報告しますが、それを修正する方法がわかりません:

代替テキスト

エラー: インポートからの未定義の変数: get

これを修正する方法は?確かに、それは PyDev チェッカーの問題だけです。コードは正しく、GAE で実行されます。

アップデート:

  1. 私は PyDev 1.5.0 を使用していますが、1.4.8 でも同じことを経験しました。
  2. 私の PYTHONPATH には以下が含まれます (Project Properties/PyDev - PYTHONPATH で設定):
    • C:\Program Files\Google\google_appengine
    • C:\Program Files\Google\google_appengine\lib\django
    • C:\Program Files\Google\google_appengine\lib\webob
    • C:\Program Files\Google\google_appengine\lib\yaml\lib

更新 2:

調べたところ、モジュール関数として宣言されていないことがC:\Program Files\Google\google_appengine\google\appengine\api\memcache\__init__.pyわかりました。彼らはそれを行うために次のトリックを使用します(そのような可能性について聞いたことがありません):get()memcache

_CLIENT = None


def setup_client(client_obj):
  """Sets the Client object instance to use for all module-level methods.

  Use this method if you want to have customer persistent_id() or
  persistent_load() functions associated with your client.

  Args:
    client_obj: Instance of the memcache.Client object.
  """
  global _CLIENT
  var_dict = globals()

  _CLIENT = client_obj
  var_dict['set_servers'] = _CLIENT.set_servers
  var_dict['disconnect_all'] = _CLIENT.disconnect_all
  var_dict['forget_dead_hosts'] = _CLIENT.forget_dead_hosts
  var_dict['debuglog'] = _CLIENT.debuglog
  var_dict['get'] = _CLIENT.get
  var_dict['get_multi'] = _CLIENT.get_multi
  var_dict['set'] = _CLIENT.set
  var_dict['set_multi'] = _CLIENT.set_multi
  var_dict['add'] = _CLIENT.add
  var_dict['add_multi'] = _CLIENT.add_multi
  var_dict['replace'] = _CLIENT.replace
  var_dict['replace_multi'] = _CLIENT.replace_multi
  var_dict['delete'] = _CLIENT.delete
  var_dict['delete_multi'] = _CLIENT.delete_multi
  var_dict['incr'] = _CLIENT.incr
  var_dict['decr'] = _CLIENT.decr
  var_dict['flush_all'] = _CLIENT.flush_all
  var_dict['get_stats'] = _CLIENT.get_stats


setup_client(Client())

うーん... PyDevにそれを認識させる方法はありますか?

4

6 に答える 6

25

よりクリーンな解決策があります。GAEのmemcacheを強制ビルトインに追加してみてください。

PyDev-> Interpreter-Python-> ForcedBuiltinsウィンドウで、「google.appengine.api.memcache」エントリを追加して適用します。

memcacheエラーをダブルクリックして確認すると、エラーが消えます。

システムのpythonpathにgoogleAPEインストールディレクトリが含まれていることを確認してください。

于 2010-11-24T00:09:11.483 に答える
4

パーティーには少し遅れましたが、memcache を使用するすべてのファイルに次のコメントを追加して、pydev 分析を選択的にオフにすることができます。

#@PydevCodeAnalysisIgnore

于 2010-05-28T15:25:20.123 に答える
4

プロジェクト/モジュールのすべてのコード分析をオフにしたくない場合は、その行でオフにしてください。この回答#@UndefinedVariableは、 Ctrl+1 を押してクイックフィックスを表示し、行末に挿入できることを説明しています。

于 2010-06-27T02:42:40.863 に答える
3

使用している PyDev のバージョンは何ですか? 最近のもの (1.5) または Google チュートリアルで参照されている古いもの? このスレッド
を参照してください。

PyROOTにも同様の問題があります

PyDEV プラグインは を読み取らないため$HOME/.pystartup、関数/クラスに触れることは解決策ではありません。オンザフライではなく、PYTHONPATHEclipseの設定パネルから設定したときにインポートされるpythonモジュールの構文と構造を分析するためです。

それで、あなたPYTHONPATHはGoogleライブラリを参照していますか?


1.5 のコード補完の問題で、コード分析を無効にする必要がある可能性があります: Pydev 1.5.0 コード分析がコード pyqt4 コード補完を破る - ID: 2855598

pyqt 4.5.4インストールしました。
最初にpydev 1.4.8オープン ソース バージョンをインストールし、コード補完は正常に機能しました。
pydev 1.5.0 にアップデートした後、pyqt コード補完が機能しなくなりました。
で Pydev コード分析を無効にした後"eclipse preferences -> pydev -> editor -> code analysis -> do code analysis?"、コード補完は PyQt クラスなどで再び機能し始めました。

于 2009-09-24T05:44:39.943 に答える
3

これは私にとってはうまくいきましたが、上記の解決策とは異なります。かなり簡単: http://blog.kicaj.com/fixing-pydev-memcache-unresolved-import/

google_appengine フォルダーを pydev python インタープリター ライブラリに追加するように言っているだけです。

于 2013-03-19T13:56:33.947 に答える
0

ファイルの先頭にあるコードに次の数行を追加することで、これを修正しました。

from google.appengine.api import memcache
# work-around for Eclipse+PyDev+GAE memcache error
if not hasattr(memcache, 'set'):
    Client=None
    memcache.setup_client(Client)
    memcache = Client

製品版ではコメントアウトできます。

Eclipse を快適に保ち、コード補完を機能させるためだけです。

于 2013-12-17T09:50:53.530 に答える