我使用 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-学习OK
我在 Ubuntu 16.04 LTS 上使用
sudo apt-get install python-scikits-learn
安装了 Scikit-learn。这是我运行应用程序的设备上的一些信息:
我尝试了一些不成功的事情,所以我上网查了一下:
我没有找到任何有用的东西,我不知道如何解决这个问题。有什么想法吗?
谢谢你。
当您尝试使用纯 Python 模块构建 Android 应用程序时,一切正常:该模块将由专为 Android 构建并随您的应用程序附带的 Python 解释器运行。
当您尝试使用包含 C 扩展或 C 扩展依赖项(例如 Scikit-learn)的模块构建 Android 应用程序时,情况会更糟。在 Windows 或 Linux 上,C 扩展 可以使用 distutils 进行编译,但对于 Android 来说,这是个问题:C 扩展无法以这种方式编译。
python-for-android 处理这个问题提供食谱机制:
配方:配方是定义如何编译需求的文件。您可以在任何具有 Python 扩展的库都必须在 p4a 中有一个配方, 否则编译将会失败。如果没有满足需求的配方,则 将使用 pip 下载。
此处查看现有食谱列表。正如您所看到的,没有人为 Scikit-learn 做任何事情,所以我认为现在无法为 Android 构建它。
您可以尝试手动为此模块创建菜谱,或者在kivy Google 群组中寻求帮助。请注意,这可能不是一项简单的任务。