19


8

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

私がmemcacheを使い始めるまで、すべてがうまくいっていました。 PyDevがエラーを報告していますが、修正方法がわかりません。

http://www.freeimagehosting.net/uploads/fc176c0957.png[alt text http://www.freeimagehosting.net/uploads/fc176c0957.png]

エラー:インポートからの未定義の変数: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 =なし

def setup_client(client_obj): "" "すべてのモジュールレベルメソッドに使用するClientオブジェクトインスタンスを設定します。

顧客のpersistent_id()またはpersistent_load()関数をクライアントに関連付けたい場合は、このメソッドを使用してください。

Args:client_obj:memcache.Clientオブジェクトのインスタンス。 "" "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.dict '' db ' _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にそれを認識させる方法はありますか?

6 Answer


25


もっときれいな解決策があります:あなたの強制的な組み込み関数にGAEのmemcacheを追加してみてください。

PyDev→ Interpreter-Python→ ForcedBuiltinsウィンドウで、 "google.appengine.api.memcache"エントリを追加して適用してください。

それらをチェックするためにmemcacheエラーをダブルクリックすると、それらは消えます!

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


4


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

#@ PydevCodeAnalysisIgnore


4


プロジェクト/モジュールのすべてのコード分析を無効にしたくない場合は、その行に対して無効にします。 この回答あなたは素早く立ち上げるためにCtrl 1を押すことができることを説明行末に `#@ UndefinedVariable`を修正して挿入してください。


3


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

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

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

'' '' '

これらは1.5のコード補完の問題で、コード分析を無効にすることを強いるかもしれません。http://sourceforge.net/tracker/index.php?func=detail

「pyqt 4.5.4」がインストールされています。 最初はオープンソース版のpydev 1.4.8がインストールされていて、コード補完はうまくいきました。 pydev 1.5.0にアップデートした後、pyqt code completionは機能しなくなりました。 「Eclipseの設定 - > pydev - >エディタ - >コード分析 - >コード分析を行いますか?」でPydevコード分析を無効にした後、PyQtクラスなどでコード補完が再び働き始めました。 __


3


これは私のために働いた、それは上記の解決策とは異なります。 かなり簡単:http://blog.kicaj.com/fixing-pydev-memcache-unresolved-import/

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


0


私は、ファイルの一番上のコードにこの数行を追加することによってそれを修正しました:

google.appengine.apiからインポートmemcache#回避策Eclipse PyDev GAEのmemcacheエラーが発生しない場合hasattr(memcache、 'set'):Client = None memcache.setup_client(Client)memcache = Client

あなたはそれを製品版で公開することができます。

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