Python、Kivy、Buildozer:使用 python-firebase/requests 时出错

Posted

技术标签:

【中文标题】Python、Kivy、Buildozer:使用 python-firebase/requests 时出错【英文标题】:Python, Kivy, Buildozer: error using python-firebase/requests 【发布时间】:2016-07-03 23:16:24 【问题描述】:

[python = 2.7]

我最近开始使用 kivy(最新版本)开发一个适用于 android 的应用程序。为此,我使用 buildozer(最新版本)来创建 apk 文件。现在,即使使用 python-firebase 模块,我的计算机上的一切都可以正常工作。将数据发送到 firebase 在线数据库。但是当我想在我的手机上使用 python 模块 python-firebase(基于模块 requests)时,应用程序在加载几秒钟后崩溃。

目前我在 buildozer.spec 中的要求是 plyer 和 kivy。如果我尝试向此列表添加请求,则会收到错误消息:

在 virtualenv 中安装需求请求

运行'pip install --download-cache=/home/notwaka/.buildozer/cache --target=/home/notwaka/Desktop/Gps/.buildozer/applibs requests'

Cwd /home/notwaka/Desktop/Gps/.buildozer

Usage:   
  pip install [options] <requirement specifier> [package-index-options] ...
  pip install [options] -r <requirements file> [package-index-options] ...
  pip install [options] [-e] <vcs project url> ...
  pip install [options] [-e] <local project path> ...
  pip install [options] <archive url/path> ...

没有这样的选项:--download-cache

命令失败:pip install --download-cache=/home/notwaka/.buildozer/cache --target=/home/notwaka/Desktop/Gps/.buildozer/applibs 请求

Buildozer 执行最后一条命令失败

我是否需要向需求添加请求,因为它是在使用 buildozer 的文档中的示例中完成的?我该怎么做才能使 python-firebase 在我的 android 设备上工作?我不知道如何制作食谱,也找不到任何好的文档。制作食谱可以吗?有没有人试图让firebase在android上使用python?

提前致谢!

编辑:

'# Check application requirements
# Run './distribute.sh -l'
# Cwd /home/notwaka/Desktop/try/.buildozer/android/platform/python-for-android
Available modules: android apsw audiostream bidi boost cherrypy c_igraph click cprotobuf cymunk django docutils ecdsa enum34 evdev ffmpeg ffmpeg2 ffpyplayer ffpyplayer_tito flask freetype gevent greenlet harfbuzz hostpython igraph itsdangerous jinja2 jpeg kivent_core kivent_cymunk kivy leveldb libevent libpq libsodium libswift libtorrent libxml2 libxslt libyaml lxml m2crypto markupsafe midistream msgpack mysql_connector netifaces numpy opencv openssl paramiko pil plyer plyvel png polygon protobuf psutil psycopg2 pyasn1 pycrypto pygame pyjnius pylibpd pyopenssl pyparsing pyqrcode python pyyaml sdl setuptools six sqlalchemy sqlite3 storm swift thrift twisted txws werkzeug wokkel zeroconf zope
# Remove directory and subdirectory /home/notwaka/Desktop/try/.buildozer/applibs
# Create directory /home/notwaka/Desktop/try/.buildozer/applibs
# Run 'bash -c "source venv/bin/activate && env"'
# Cwd /home/notwaka/Desktop/try/.buildozer
LC_PAPER=nl_NL.UTF-8
XDG_VTNR=7
LC_ADDRESS=nl_NL.UTF-8
XDG_SESSION_ID=c2
CLUTTER_IM_MODULE=xim
XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/notwaka
SELINUX_INIT=YES
LC_MONETARY=nl_NL.UTF-8
GPG_AGENT_INFO=/run/user/1000/keyring-wWFm7x/gpg:0:1
VTE_VERSION=3409
SHELL=/bin/bash
TERM=xterm
LC_NUMERIC=nl_NL.UTF-8
WINDOWID=65011724
UPSTART_SESSION=unix:abstract=/com/ubuntu/upstart-session/1000/1938
GNOME_KEYRING_CONTROL=/run/user/1000/keyring-wWFm7x
GTK_MODULES=overlay-scrollbar:unity-gtk-module
USER=notwaka
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
LC_TELEPHONE=nl_NL.UTF-8
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
SSH_AUTH_SOCK=/run/user/1000/keyring-wWFm7x/ssh
DEFAULTS_PATH=/usr/share/gconf/ubuntu.default.path
VIRTUAL_ENV=/home/notwaka/Desktop/try/.buildozer/venv
XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg
PATH=/home/notwaka/Desktop/try/.buildozer/venv/bin:/home/notwaka/.buildozer/android/platform/apache-ant-1.9.4/bin:/home/notwaka/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
DESKTOP_SESSION=ubuntu
QT_IM_MODULE=ibus
ANDROIDAPI=19
QT_QPA_PLATFORMTHEME=appmenu-qt5
LC_IDENTIFICATION=nl_NL.UTF-8
JOB=gnome-session
PWD=/home/notwaka/Desktop/try/.buildozer
XMODIFIERS=@im=ibus
LANG=en_US.UTF-8
GNOME_KEYRING_PID=1936
GDM_LANG=en_US
MANDATORY_PATH=/usr/share/gconf/ubuntu.mandatory.path
LC_MEASUREMENT=nl_NL.UTF-8
ANDROIDNDK=/home/notwaka/.buildozer/android/platform/android-ndk-r9c
IM_CONFIG_PHASE=1
COMPIZ_CONFIG_PROFILE=ubuntu
PS1=(venv) 
GDMSESSION=ubuntu
PACKAGES_PATH=/home/notwaka/.buildozer/android/packages
SESSIONTYPE=gnome-session
HOME=/home/notwaka
SHLVL=2
XDG_SEAT=seat0
LANGUAGE=en_US
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
UPSTART_INSTANCE=
UPSTART_EVENTS=started starting
ANDROIDSDK=/home/notwaka/.buildozer/android/platform/android-sdk-20
LOGNAME=notwaka
XDG_DATA_DIRS=/usr/share/ubuntu:/usr/share/gnome:/usr/local/share/:/usr/share/
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-lqf94SPFU0
QT4_IM_MODULE=xim
LESSOPEN=| /usr/bin/lesspipe %s
ANDROIDNDKVER=r9c
UPSTART_JOB=unity-settings-daemon
INSTANCE=Unity
TEXTDOMAIN=im-config
DISPLAY=:0
XDG_RUNTIME_DIR=/run/user/1000
XDG_CURRENT_DESKTOP=Unity
GTK_IM_MODULE=ibus
LESSCLOSE=/usr/bin/lesspipe %s %s
LC_TIME=nl_NL.UTF-8
TEXTDOMAINDIR=/usr/share/locale/
LC_NAME=nl_NL.UTF-8
XAUTHORITY=/home/notwaka/.Xauthority
COLORTERM=gnome-terminal
_=/usr/bin/env
# Install distribute
# Run 'curl http://python-distribute.org/distribute_setup.py | venv/bin/python'
# Cwd /home/notwaka/Desktop/try/.buildozer
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
# Install requirement pygments in virtualenv
# Run 'pip install --download-cache=/home/notwaka/.buildozer/cache --target=/home/notwaka/Desktop/try/.buildozer/applibs pygments'
# Cwd /home/notwaka/Desktop/try/.buildozer

Usage:   
  pip install [options] <requirement specifier> [package-index-options] ...
  pip install [options] -r <requirements file> [package-index-options] ...
  pip install [options] [-e] <vcs project url> ...
  pip install [options] [-e] <local project path> ...
  pip install [options] <archive url/path> ...

no such option: --download-cache
# Command failed: pip install --download-cache=/home/notwaka/.buildozer/cache --target=/home/notwaka/Desktop/try/.buildozer/applibs pygments
# 
# Buildozer failed to execute the last command
# The error might be hidden in the log above this error
# Please read the full log, and search for it before
# raising an issue with buildozer itself.
# In case of a bug report, please add a full log with log_level = 2
'

【问题讨论】:

【参考方案1】:

Firebase 在 python Kivy 上工作时存在问题。见https://github.com/ozgur/python-firebase/pull/26

这是因为 Firebase 使用的 Kivy 不完全支持多核处理。这导致 kivy Firebase 应用程序崩溃。

我还没有尝试过这个补丁,但是看看 cmets,Zkanda 做得很好。这可能就是您正在寻找的。​​p>


或者,您可以使用 json 从 Firebase 下载数据。

我使用 Firebase 所做的是使用 python 的原生 Requests 库对 Firebase 进行 json 调用,他们支持 https。

import json, requests
url = "https://myfirebaseurl.firebaseio.com/some_database.json"
resp = requests.get(url = url, json = 'create':True)
data = resp.json()

在您的 buildozer.spec 文件的“要求”下,包含

requirements = kivy,requests,simplejson,openssl 

openssl是支持https的,simplejson是支持json的。


【讨论】:

我花了很多时间从我的 kivy 程序成功调用 json。虽然它可以在桌面上运行,但当我使用 buildozer 创建 apk 时,它并没有来自我的 android。有人在 kivy 中告诉我不需要在 buildozer.spec 要求部分中提到 json 作为本机 python 库的用户论坛,但是在这里我看到您使用 simplejson 用于 json。您是否有一个来源可以说明所有流行的库实际上可以使用在 buildozer 中,这些名称的列表在哪里。【参考方案2】:

没有这样的选项:--download-cache

这反映了 python-for-android 中的一个错误,该错误现已修复。如果您让 buildozer 重新下载 python-for-android,例如通过删除构建目录中的 .buildozer 目录,它应该可以工作。

你也可以编辑当前下载的distribute.sh,在调用pip时去掉--download-cache选项。

【讨论】:

我删除了 .buildozer 文件夹并通过 buildozer android debug 重新构建它,但是失败了。在distribute.sh 文件中也没有关于--download-cache 的内容。每次当我向需求添加请求时,它都会给出相同的错误,如果我不添加它,应用程序将不会通过使用导入请求来启动。这是distribute.sh 中唯一包含pip 的行:' debug "Install pure-python modules via pip in venv" try bash -c "source venv/bin/activate && env CC=/bin/false CXX=/bin/false PYTHONPATH= pip install --target '$SITEPACKAGES_PATH' -r requirements.txt"' 它仍然失败并出现同样的--download-cache 错误? 是的。难道是标准的python 2.7.6版本不支持这个?因为我使用 Ubuntu 14.04 LTS 的标准 python + pip 版本。问题是如果不将它们添加到 buildozer.spec 中的要求中,就不可能导入“requests”或“python-firebase”。这两个模块都是由 pip 安装的,所以这是奇怪的部分...... 您遇到的错误是由 python-for-android 在调用 pip 时添加(现在不可用)--download-cache 选项引起的。如果您的 p4a 是最新的并且不包含该内容,我不知道您是如何触发问题的。 我下载了 kivy、buildozer 和所有需要的东西。我刚刚更新了所有内容,但它仍然给出了那个错误。你建议现在尝试什么?同样在.buildozer/android/platform/python-for-android中的distribute.sh文件中,只有一行pip标准库。【参考方案3】:

在遇到与 pygments 类似的问题时,我尝试了建议的解决方案,但它也对我不起作用。我提高了日志级别,发现 pygments 正在我的发行版上下载到 lib64/python,而 pip 正在寻找 lib/python。

似乎与这个 pip 问题有关:https://github.com/pypa/pip/issues/3056

我在 .buildozer 文件夹中为我的应用添加了一个 setup.cfg 文件,其中包含:

[install]
install-purelib=$base/lib64/python

我的应用现在安装成功了。

【讨论】:

嗯,这也不能解决我的问题。我编辑了帖子中的总错误,也许你可以看看? @Henkelis 我从您的日志中看到您现在正在尝试安装 pygments,因此看起来您已将其添加到您的 buildozer 规范中。您能否将 buildozer 规范中的 log_level 更改为 2 并重新运行,然后发布您的输出。在我添加 setup.cfg 文件之前,我收到了您显示的错误 - 您添加了吗?

以上是关于Python、Kivy、Buildozer:使用 python-firebase/requests 时出错的主要内容,如果未能解决你的问题,请参考以下文章

Python/Kivy/Buildozer - 应用程序在 Android 中崩溃,但在 PC 上运行良好

《Buildozer打包实战指南》第二节 安装Kivy和Buildozer

《Buildozer打包实战指南》第二节 安装Kivy和Buildozer

buildozer(kivy,python) 无法将生成的 apk 复制到 docker 虚拟机上的主目录

使用 buildozer 在 android 上部署 kivy 应用程序时出错

如何使用 kivy-buildozer 为我的 android 应用程序添加图标?