Emk*_*mke 6 android beautifulsoup apk python-2.7 kivy
我能够构建一个.apk,但是在我安装到我的Android手机上之后它就会在启动时崩溃.我失败的想法是我使用第三方库,例如(beautifulsoup).
这是我的导入在main.py中的样子:
from kivy.app import App
from kivy.properties import ListProperty, StringProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.scrollview import ScrollView
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
import time, os, random, urllib2, re, cookielib as cj
from bs4 import BeautifulSoup as bs
from functools import partial
Run Code Online (Sandbox Code Playgroud)
我正在运行小牛10.9.3
它与buildozer.spec文件有关吗?我已经尝试将BeautifulSoup添加到应用程序要求,但它并没有改变一件事.
任何帮助,将不胜感激.
我也遇到了这个问题,但我(显然)能够通过一种解决方法让一切正常.既然它看起来不像你发布了一个logcat,我会假设你遇到了同样的问题.
是的,您需要在规范中列出beautifulsoup4作为要求.从查看bs4的代码来看,看起来bs4愿意使用几个"构建器"中的任何一个.它支持HTMLParser,html5lib或lxml.我不知道为什么我们不能加载HTMLParser,但它实际上是三者中最不喜欢的库,如果它不是因为导入没有尝试阻止的事实,似乎一切都会正常工作(如只要其他解析库之一可用).
考虑到这一点,我包含了其他一个库,我决定破解导入过程,以便Python假装_htmlparser加载好了:)
这篇文章很有启发性:http://xion.org.pl/2012/05/06/hacking-python-imports/
最终的结果是这样的:
import imp
import sys
class ImportBlocker(object):
def __init__(self, *args):
self.black_list = args
def find_module(self, name, path=None):
if name in self.black_list:
return self
return None
def load_module(self, name):
module = imp.new_module(name)
module.__all__ = [] # Necessary because of how bs4 inspects the module
return module
sys.meta_path = [ImportBlocker('bs4.builder._htmlparser')]
from bs4 import BeautifulSoup
Run Code Online (Sandbox Code Playgroud)
我还在buildozer.spec中添加了html5lib.
现在,这是解决问题的正确方法吗?我不知道.最好的方法可能是请求作者修复它.将导入放在try块中可能很简单.尽管如此,这是我目前使用的方法,它至少是一个有趣的练习,并且是一种测试你的应用程序的方法,直到更好的解决方案出现.
另外,我应该警告你,我最近才这样做,所以我不能100%保证它不会导致任何问题,但至少,它能够很好地运行我的应用程序并抓取特定的网站我对此感兴趣.祝你好运!
归档时间: |
|
查看次数: |
2326 次 |
最近记录: |