【发布时间】:2017-07-26 01:00:50
【问题描述】:
我使用 Scikit-learn 和 Kivy 创建了一个应用,它是使用 Buildozer 构建的。
这是main.py的代码:
# coding=utf-8
import kivy
import sys
kivy.require('1.9.0')
from kivy.app import App
from kivy.uix.label import Label
class MyApp(App):
def build(self):
try:
from sklearn import svm, datasets
except:
return Label(text=str(sys.exc_info()[1]))
else:
return Label(text='Scikit-learn OK')
if __name__ == '__main__':
MyApp().run()
我在 buildozer.spec 的要求中指定了 Scikit-learn:
[app]
title = Kivyris
package.name = kivyris
package.domain = org.test
source.dir = .
source.include_exts = py,png,jpg,kv,atlas
version = 0.1
requirements = kivy,numpy,scipy,scikit-learn
orientation = landscape
fullscreen = 1
log_level = 2
warn_on_root = 1
我运行了buildozer android_new debug deploy run(没有错误,APK 文件已创建并部署),但应用启动时出现以下错误:
无法加载库:
/data/data/org.test.kivyris/files/app/lib/python2.7/site-packages/sklearn/check_build 的内容: __init.pyo setup.pyo _check_build.so
似乎 sckikit-learn 没有正确构建。
如果你已经从源代码安装了 scikit-learn,请不要忘记在使用前构建包;在源目录中运行
python setup.py install或make。如果您使用过安装程序,请检查它是否适合您的 Python 版本、操作系统和平台。
在 Windows 和 Ubuntu 上使用 python main.py 运行良好:
Scikit-Learn OK
我在 Ubuntu 16.04 LTS 上使用 sudo apt-get install python-scikits-learn 安装了 Scikit-learn。这是来自我运行该应用程序的设备的一些信息:
- 导入平台失败; platform.platform() :我无法获取此信息(应用无法启动),但它是 Android 5.1.1
- 导入系统确定; sys.version:2.7.2(默认,2017 年 3 月 6 日,06:05:36)[GCC 4.8]
- 导入 numpy 确定; Numpy.版本:1.9.2
- 导入 scipy 确定; Scipy.版本:0.18.1
- import sklearn:错误(见上文)。
我尝试了几件事不成功,所以我上网查找:
- https://unix.stackexchange.com/questions/240239/building-python-packages-succeeds-but-package-is-improperly-built/240260 :对我不起作用。
- Import scikit in C# application : 不是我想要的。
- https://github.com/scikit-learn/scikit-learn/issues/433:适用于 Mac,不适用于 Ubuntu。
- Cannot import Scikit-Learn:scipy 适合我。
我没有发现任何有用的东西,我不知道如何解决这个问题。请问有什么办法吗?
谢谢。
【问题讨论】:
-
你为什么要这样做?由于 scipies 巨大的大小,构建的
apk文件约为 70mb。 -
我有一个使用 SVM 的 Python 应用程序,我正在尝试迁移到 Android。由于它使用 Scikit-learn(和 iris 数据集),我认为使用 Buildozer 可能是个好主意。
-
当然这是个好主意,但它会很重。我建议你开发一个rest API来为你做计算。
标签: android python-2.7 scikit-learn kivy buildozer