Android .apk с кивом + матплотлиб - PullRequest
0 голосов
/ 09 февраля 2019

Во-первых, я прошу прощения, если это дублирующий вопрос, но я потратил много часов, прежде чем писать здесь в поисках ответа, и не смог найти ни одного (это сработало бы по крайней мере).

Я хочу (в идеале) скомпилировать скрипт python (3.6 / 7) в приложение для Android.Мне нужно использовать внешние библиотеки в моем коде, а именно matplotlib и numpy .

У меня есть Kivy Launcher в моем устройстве Android и я могу запуститьОбычные («чистые») скрипты на Kivy не проблема, и они работают нормально.Мой код, включая matplotlib (см. Ниже), однако, сразу вылетает, так как я считаю, что модуль не включен в Kivy Launcher .

Что касается попытки скомпилировать apk, я скачалВМ от https://kivy.org/#download с предустановленной и предварительно настроенной Buildozer + python-for-android .Используя его, я мог создавать файлы .apk, которые устанавливались и работали нормально, если в них не было внешних модулей.Однако я попытался установить matplotlib в качестве одного из требований в buildozer.spec , и компиляция завершилась неудачно с:

Command failed: ./distribute.sh -m "kivy matplotlib" -d "myapp"

На этом этапе ямогу запустить мой код, используя matplotlib в качестве скрипта в приложении Pydroid 3 , где я мог бы нормально устанавливать свои модули через pip ( kivy , matplotlib и т. Д.).Что касается интерфейса kivy - matplotlib , я использую цветок matplotlib в модуле kivy-garden , который я только что упаковал локальномой код, запустив

garden install --app matplotlib

в каталоге скриптов перед экспортом моего кода на устройство Android.

Есть ли способ запустить его как собственное приложение или, по крайней мере, черезКиви Лаунчер?Я читал, что до сих пор buildozer не поддерживает matplotlib , но это был комментарий, на который нет ссылок более полугода назад.Я также в порядке, если я могу получить .apk с запущенным matplotlib, возиться с python-for-android напрямую, хотя я не знаю, как это будет работать.

Наконец, япопытался загрузить исходные коды numpy и matplotlib и добавить модули локально в мой пакет, чтобы buildozer не нужно было загружать / заботиться о них, но я нене знаю, как это сделать для больших, сложных модулей, подобных этим (если это вообще возможно).

Это пример кода, для которого я хотел бы получить .apk (скопировано с Какчтобы начать / использовать matplotlib в kivy ):

from kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
import matplotlib.pyplot as plt

plt.plot([1, 23, 2, 4])
plt.ylabel('some numbers')

class MyApp(App):

    def build(self):
        box = BoxLayout()
        box.add_widget(FigureCanvasKivyAgg(plt.gcf()))
        return box

MyApp().run()
...