Android App via buildozer: requirements vs. recipes

Django, Flask, Bottle, WSGI, CGI…
Antworten
DrCapa
User
Beiträge: 2
Registriert: Donnerstag 6. August 2020, 17:07

Hallo,
mein Ziel ist es, eine App für Android zu erstellen. Dazu nutze ich das Framework kivy und buildozer. Mein Thema ist das Einbinden der Bibliothek pandas. Mein lauffähiges Minimalbeispiel sieht wie folgt aus:

Code: Alles auswählen

from kivy.app import App
from kivy.uix.label import Label

import kivy
kivy.require('1.11.1')

import pandas as pd

class TestLibraries(App):
    
    def build(self):
        
        df = pd.DataFrame()
        df.loc[0, 'text'] = 'this is pandas'
        return Label(text = df.loc[0, 'text'])


if __name__ == '__main__':
    TestLibraries().run()

Im Schritt muss die .spec-Datei für buildozer definiert werden. Hierbei sehe ich zwei Möglichkeiten um pandas einzubinden.

1. Einbindung via requirements:
Dazu modifiziere ich die spec-Datei wie folgt:

Code: Alles auswählen

# (list) Application requirements
# comma separated e.g. requirements = sqlite3,kivy
requirements = python3,kivy==1.11.1,pandas
Dieser Weg funktioniert sehr gut.

2. Einbindung via recipe
Hierfür verwende ich das recipe https://github.com/kivy/python-for-andr ... pes/pandas von github und speichere es lokal im Ordner recipe. Die .spec-Datei wird dann wie folgt modifiziert:

Code: Alles auswählen

# (str) The directory in which python-for-android should look for your own build recipes (if any)
p4a.local_recipes = /PATH_TO_FOLDER/recipe/
Nach dem Erstellen der apk-Datei steht im Logfile:

Code: Alles auswählen

Listing '/PATH_TO_FOLDER/.buildozer/android/app/recipe/pandas'...
Compiling 'PATH_TO_FOLDER/.buildozer/android/app/recipe/pandas/__init__.py'...
D.h. also buildozer findet das zu verwende recipe. Aber leider wird pandas nicht installiert und die App ist nicht ausführbar.

Und nun ist die Frage: Warum?

Zudem könnte man die Frage stellen, warum ich die 2. Option versuche, wobei doch die 1. funktioniert. Der Grund ist: Ich möchte für eine anderen Bibliothek, welche nicht über die requirements eingebunden werden kann, ein eigenes recipe schreiben. Im ersten Schritt möchte ich daher lernen, wie man ein recipe erfolgreich verwendet.

Ich hoffe ihr habe damit Erfahrungen und könnt mich unterstützen.

Grüße & Danke
DrCapa
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich habe kein Android, und das daher nie versucht. Darum nur ein paar allgemeine Tipps und Fragen:

- bist du sicher, du kannst die beiden Optionen nicht auch kombinieren?
- pandas ist ein ziemlich dickes Projekt. Es waere ggf. besser, ein kleiners, simpleres als Startpunkt fuer deine "ich lerne wie ein recipe geschrieben wird"-Reise zu waehlen.
- warum ist dein Paket nicht per requirement installierbar, und ist das nicht ggf. ein einfacher zu loesendes Problem?
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

bist du sicher, dass das mit Pandas überhaupt funktioniert? Pandas hat ja wiederum Abhängigkeiten wie numpy und numpy verwendet C-Extensions. Die müssten ja für die Zielplattform kompiliert sein / werden, damit das funktioniert.

Und der obligatorische Hinweis: Python ist seitens Google (und auch Apple) nicht wirklich dafür vorgesehen, Apps für Android (und iOS) zu entwickeln. Wenn du eine "ernsthafte" App willst, dann nimm' eine Sprache, die von der Zielplattform offiziell unterstützt wird. Wenn man Python kann sollte IMHO der Einsatz von Flutter und Dart relativ gut erlernbar sein.

Gruß, noisefloor
DrCapa
User
Beiträge: 2
Registriert: Donnerstag 6. August 2020, 17:07

Hallo,

ich bin mir sicher, dass die Einbindung der Pandas-Bibliothek via Option 1 funktioniert. Ich habe die entsprechende Android-App auf meinem Handy installiert und verwendet. Die Hinweise bzgl. geeigneter Werkzeuge nehme ich gern zur Kenntnis, möchte aber keine Grundsatzdiskussion entfachen.
Mein Ziel ist die Erarbeitung eines eigenen Recipe unter dem Verständnis einer persönlichen Weiterbildung (Konzepte verstehen und weiterentwickeln). Daher suche ich hier den fachlichen Austausch.

Beste Grüße
Antworten