2012-01-21 10 views
8

私はlxmlを使ってページを解析しています。私は、App EngineのSDK、それは動作しますが、私は雲の中に自分のアプリケーションを展開するとき、私はここにmessegeを取得して自分のコードを実行すると:lxmlを使用したGoogle App EngineでのImportError

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

こんにちはartem、SDKに入っているときにインポートエラーが発生することを除いて同様の問題が発生しています.Googleのサーバーではまだ試していません。あなたのコンピュータにlxmlをインストールする必要がありましたか?私はそれが私の問題だと思っていますが、私はそれがSDKに付属すると仮定しました... – Stin

答えて

2

私はこれが古い質問です知っているが、ここでのApp Engineに展開されたときに、私は仕事に確認している答えは:

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.pyからscript: handler_info.applicationに変更してください。
  2. webappより少し良く、より新しいwebapp2を使用してください。

この質問に尋ねられた2012年以降に問題が解決された可能性もあります。

関連する問題