2012-01-21 29 views
8

के साथ Google App Engine पर ImportError मैं पृष्ठों को पार्स करने के लिए lxml का उपयोग करता हूं। जब मैं अनुप्रयोग इंजन एसडीके यह काम करता है, लेकिन जब मैं बादल में अपने आवेदन की तैनाती, मैं एक messege यहाँ प्राप्त के साथ अपने कोड चलाएँ:एलएक्सएमएल

Traceback (most recent call last): File "/base/data/home/apps/s~testparsercyka/1.356245976008257055/handler_info.py", line 2, in import lxml.html File "/base/data/home/apps/s~testparsercyka/1.356245976008257055/lxml/html/init.py", line 12, in from lxml import etree ImportError: cannot import name etree

कोड:

app.yaml



    application: testparsercyka 
    version: 1 
    runtime: python27 
    api_version: 1 
    threadsafe: false 

    handlers: 
    - url: /stylesheets 
     static_dir: stylesheets 

    - url: /.* 
     script: handler_info.py 

    libraries: 
    - name: lxml 
     version: "2.3" # I thought this would allow me to use lxml.etree 

handler_info.py



    import lxml 
    import lxml.html 
    import urllib 
    from google.appengine.ext import webapp 
    from google.appengine.ext.webapp.util import run_wsgi_app 
    from google.appengine.ext.webapp import template 
    import os 
    import cgi 
    class MainPage(webapp.RequestHandler): 
     def get(self): 
      template_values = {} 
      path = os.path.join(os.path.dirname(__file__), 'index.html') 
      self.response.out.write(template.render(path, template_values)) 
    class Handlers(webapp.RequestHandler): 
     def post(self): 
      #url = "http://habrahabr.ru/" 
      url = str(self.request.get('url')) 
      url_temp = url 
      teg = str(self.request.get('teg')) 
      attr = str(self.request.get('attr')) 
      n0 = str(self.request.get('n0')) 
      n = str(self.request.get('n')) 
      a = attr.split(':') 
      for i in range(int(n0),int(n)): 
       url = url.format(str(i)) 
       self.response.out.write(url) 
       html = urllib.urlopen(url).read()  
       doc = lxml.html.document_fromstring(html) 
       url = url_temp 
       self.getn(doc.getroottree().getroot(),teg,a) 
     def getn(self,node,teg,a): 
       if ((node.tag==teg) and (node.get(a[0])==a[1])): 
        #print node.tag,node.keys() 
        self.response.out.write(node.text) 
        self.response.out.write('
') for n in node: self.getn(n,teg,a) application = webapp.WSGIApplication([('/', MainPage),('/sign',Handlers)],debug=True) def main(): run_wsgi_app(application) if __name__ == "__main__": main()

कोई विचार क्यों यह काम नहीं करता है?

+0

हाय आर्टेम, मुझे एक समान समस्या है, सिवाय इसके कि मुझे एसडीके में आयात त्रुटि मिलती है, इसलिए मैंने अभी तक Google के सर्वर पर कोशिश नहीं की है। क्या आपको अपने कंप्यूटर पर lxml इंस्टॉल करना है? मुझे आश्चर्य है कि यह मेरी समस्या है, लेकिन मुझे लगता है कि यह एसडीके के साथ आएगा ... – Stin

उत्तर

2

मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन यहाँ एक जवाब है कि मैं काम करने के लिए जब App इंजन के लिए तैनात की पुष्टि की है है:

app.yaml

application: lxml-test 
version: 1 
runtime: python27 
api_version: 1 
threadsafe: false 

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

libraries: 
- name: lxml 
    version: "2.3" 

- name: webapp2 
    version: "latest" 

app.py

import webapp2 
import lxml.etree 

class MainPage(webapp2.RequestHandler): 
    def get(self): 
     root = lxml.etree.XML('<top><content>Hello world!</content></top>') 
     self.response.content_type = 'text/xml' 
     self.response.write(lxml.etree.tostring(root, xml_declaration=True)) 

app = webapp2.WSGIApplication(routes=[('/', MainPage)], debug=True) 

तो उपरोक्त की तुलना अपने कोड के साथ करने के संदर्भ में, निम्नलिखित में से कुछ बदलाव टी सहायता:

  1. script: hander_info.pyscript: handler_info.application पर बदलें।
  2. वेबपैप 2 का उपयोग करें जो थोड़ा अच्छा है और webapp से नया है।

यह भी संभव है कि इस सवाल से पूछा गया कि 2012 से इस मुद्दे को हल कर लिया गया है।

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