2009-09-24 13 views
19

मैंने Google App Engine के लिए अपना पहला ऐप विकसित करने के लिए पर्यावरण के रूप में एक्लीप + पायडेव का उपयोग करना शुरू कर दिया है। ग्रहण this tutorial के अनुसार कॉन्फ़िगर किया गया है।ग्रहण + पायडेव + जीएई memcache त्रुटि

सब कुछ तब तक काम कर रहा था जब तक कि मैं memcache का उपयोग शुरू नहीं करता। PyDev त्रुटियों रिपोर्ट करता है और मैं नहीं जानता कि यह कैसे तय करने के लिए:

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

त्रुटि: आयात से अपरिभाषित चर:

इसे ठीक करने के कैसे मिलता? निश्चित रूप से, यह केवल PyDev चेकर समस्या है। कोड सही है और जीएई पर चलाया जाता है।

अद्यतन:

  1. मैं PyDev 1.5.0 का उपयोग कर रहा हूँ, लेकिन अनुभवी 1.4.8 के साथ एक ही।
    • 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:

-
  • मेरे PYTHONPATH (PYTHONPATH में प्रोजेक्ट गुण/PyDev सेट) भी शामिल है

    मैंने 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 मजबूर करने के लिए?

  • +0

    1.4.8 के साथ ही? तो यह एक PythonPATH परिभाषा समस्या तब होनी चाहिए। – VonC

    +0

    मुझे अभी भी इस त्रुटि को एक्लिप्स इंडिगो एसआर 2 + पायडेव 2.5 (Google ऐप इंजन 1.6.6 ऐप) और पायथन 3.2 के साथ मिला है। अजीब चीज ... मेरे मामले में समाधान पृष्ठ के शीर्ष पर '# @ पायडेवोड आडियालिस इग्नोर 'जोड़ना था क्योंकि @ रिचर्ड ग्रीन का उल्लेख है: http://stackoverflow.com/a/2930265/114029 –

    उत्तर

    3

    पीडीडीव का आप किस संस्करण का उपयोग कर रहे हैं? हालिया एक (1.5) या पुराना जिसे Google ट्यूटोरियल द्वारा संदर्भित किया गया है?
    this thread देखें।

    वहाँ एक समान issue with PyROOT

    Since PyDEV plugin does not read $HOME/.pystartup , touching functions/ classes is not a solution. Because it analyze the syntax and structures of python modules to be imported not on-the-fly but when I set the PYTHONPATH from Eclipse's preference panel.

    तो अपने PYTHONPATH संदर्भ करता है गूगल पुस्तकालय है?


    वे 1.5 में कोड पूरा होने के साथ एक मुद्दा है जो आप कोड विश्लेषण को निष्क्रिय करने के लिए मजबूर कर सकता है हो सकता है: Pydev 1.5.0 code anlaysis breaks code pyqt4 code completion - ID: 2855598

    have pyqt 4.5.4 installed.
    Initially I had pydev 1.4.8 the open source version installed and code completion worked fine.
    After updating to pydev 1.5.0, pyqt code completion stopped functioning.
    After disabling the Pydev code analysis in "eclipse preferences -> pydev -> editor -> code analysis -> do code analysis?", code completion began working again for PyQt classes etc.

    +0

    मैं PyDev 1.5 का उपयोग कर रहा हूं .0 लेकिन 1.4.8 के साथ इसका अनुभव किया। – bocco

    4

    मैं थोड़ा पार्टी के लिए देर हो रही है, लेकिन आप निम्नलिखित जोड़ सकते हैं आपकी फ़ाइलों कि मेम्कैश का उपयोग चुनिंदा Pydev विश्लेषण बंद करने के सभी में टिप्पणी:

    #@PydevCodeAnalysisIgnore

    4

    आप बंद करना नहीं चाहते हैं अपने प्रोजेक्ट/मॉड्यूल के लिए सभी कोड विश्लेषण, फिर बस उस लाइन के लिए इसे बंद करें।This answer बताता है कि आप त्वरित फिक्स लाने के लिए Ctrl + 1 दबा सकते हैं और लाइन के अंत में #@UndefinedVariable डाल सकते हैं।

    25

    एक क्लीनर समाधान है: अपने मजबूर बिल्डरों में जीएई के memcache जोड़ने का प्रयास करें।

    अपने पायडेव-> इंटरप्रिटर-पायथन-> फोर्सबिल्टिन विंडो में, "google.appengine.api.memcache" प्रविष्टि जोड़ें और लागू करें।

    उन्हें वापस जांचने के लिए memcache त्रुटियों पर डबल-क्लिक करें, वे गायब हो जाते हैं!

    कृपया सुनिश्चित करें कि सिस्टम पायथनपैथ में Google एपीई इंस्टॉल निर्देशिका शामिल है।

    +2

    बहुत बहुत धन्यवाद। इस टिप को वोट देने की जरूरत है! – smith324

    +2

    यह मेरे लिए भी काम करता है, धन्यवाद! –

    +0

    यकीन नहीं है कि मुझे ग्रहण से परियोजना को क्यों हटा देना था और इसके लिए इसे फिर से आयात करना था। – Ralphz

    3

    यह मेरे लिए काम करता है और यह उपरोक्त समाधानों से अलग है। सुंदर सीधे आगे: http://blog.kicaj.com/fixing-pydev-memcache-unresolved-import/

    बस Pydev अजगर दुभाषिया पुस्तकालय के लिए google_appengine फ़ोल्डर जोड़ने के लिए कहते हैं।

    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 
    

    आप इसे उत्पादन संस्करण में बाहर commnet कर सकते हैं।

    यह केवल ग्रहण को खुश रखने और कोड पूर्ण करने के काम को रखने के लिए है।

    संबंधित मुद्दे