构建Python包成功,但Scikit-learn构建不正确

问题描述 投票:0回答:2

我使用 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。这是我运行应用程序的设备上的一些信息:

  • 导入平台失败; platform.platform() :我无法获取此信息(应用程序无法启动),但它是 Android 5.1.1
  • 导入sys即可; sys.version :2.7.2(默认,2017 年 3 月 6 日,06:05:36)[GCC 4.8]
  • 导入numpy即可; Numpy.版本:1.9.2
  • 导入scipy就OK了; Scipy.版本:0.18.1
  • 导入 sklearn:错误(见上文)。

我尝试了一些不成功的事情,所以我上网查了一下:

我没有找到任何有用的东西,我不知道如何解决这个问题。有什么想法吗?

谢谢你。

android python-2.7 scikit-learn kivy buildozer
2个回答
1
投票

当您尝试使用纯 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 群组中寻求帮助。请注意,这可能不是一项简单的任务。


0
投票
我也遇到同样的麻烦了!这个问题你解决了吗?

© www.soinside.com 2019 - 2024. All rights reserved.