首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Boto3客户端会话在Kivy应用程序中失败

Boto3客户端会话在Kivy应用程序中失败
EN

Stack Overflow用户
提问于 2017-10-19 00:34:59
回答 2查看 484关注 0票数 2

我正在开发一个Kivy应用程序,它需要使用S3将一个文件上传到boto3,但是在试图加载endpoint模型和建立client连接时,JSON decoder.py失败了。这在16.04上本地运行很好,但是在使用buildozer编译和在Lollipop 5.1.1上运行之后就失败了。

Buildozer日志.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
I/python  (27222): [INFO   ] [Base        ] Leaving application in progress...

I/python  (27222):  Traceback (most recent call last):

I/python  (27222):    File "/build/phytogp/android/app/main.py", line 10, in <module>
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/kivy/app.py", line 828, in run
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/kivy/base.py", line 504, in runTouchApp
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/kivy/core/window/window_sdl2.py", line 663, in mainloop
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/kivy/core/window/window_sdl2.py", line 405, in _mainloop
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/kivy/base.py", line 342, in idle
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/kivy/base.py", line 327, in dispatch_input
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/kivy/base.py", line 293, in post_dispatch_input
I/python  (27222):    File "kivy/_event.pyx", line 718, in kivy._event.EventDispatcher.dispatch (kivy/_event.c:8191)
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/kivymd/ripplebehavior.py", line 68, in on_touch_up
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/kivymd/button.py", line 314, in on_touch_up
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/kivymd/button.py", line 206, in on_touch_up
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/kivy/uix/behaviors/button.py", line 179, in on_touch_up
I/python  (27222):    File "kivy/_event.pyx", line 714, in kivy._event.EventDispatcher.dispatch (kivy/_event.c:8146)
I/python  (27222):    File "kivy/_event.pyx", line 1225, in kivy._event.EventObservers.dispatch (kivy/_event.c:14035)
I/python  (27222):    File "kivy/_event.pyx", line 1109, in kivy._event.EventObservers._dispatch (kivy/_event.c:12816)
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/kivy/lang/builder.py", line 64, in custom_callback
I/python  (27222):    File "<string>", line 31, in <module>
I/python  (27222):    File "/build/phytogp/android/app/views/widgets/checkedin.py", line 112, in finish_button_on_release
I/python  (27222):    File "/build/phytogp/android/app/views/widgets/checkedin.py", line 144, in upload_report
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/boto3/__init__.py", line 83, in client
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/boto3/session.py", line 263, in client
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/botocore/session.py", line 826, in create_client
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/botocore/session.py", line 701, in get_component
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/botocore/session.py", line 897, in get_component
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/botocore/session.py", line 186, in create_default_resolver
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/botocore/loaders.py", line 132, in _wrapper
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/botocore/loaders.py", line 420, in load_data
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/site-packages/botocore/loaders.py", line 175, in load_file
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/json/__init__.py", line 339, in loads
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/json/decoder.py", line 366, in decode
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/json/decoder.py", line 382, in raw_decode
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/json/scanner.py", line 38, in _scan_once
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/json/decoder.py", line 195, in JSONObject
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/json/scanner.py", line 40, in _scan_once
I/python  (27222):    File "/build/phytogp/android/platform/build/dists/phytogp/private/lib/python2.7/json/decoder.py", line 262, in JSONArray
I/python  (27222):  ValueError: Expecting , delimiter: line 63 column 29 (char 1666)

引起问题的连接命令是:

main.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
client = boto3.client(
            's3',
            aws_access_key_id='IVEGOTTHEKEY',
            aws_secret_access_key='IVEGOTTHESECRET',
            region_name='ap-southeast-2',
        )

查看堆栈跟踪时,它试图在endpoints.json方法中的load_file行加载botocore.loader

loaders.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@instance_cache
    def load_data(self, name):

        for possible_path in self._potential_locations(name):
            found = self.file_loader.load_file(possible_path)
            if found is not None:
                return found
        # We didn't find anything that matched on any path.
        raise DataNotFoundError(data_path=name)

这里它正在寻找endpoints.json中的_potential_locations,如下所示:

loaders.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# The included models in botocore/data/ that we ship with botocore.
BUILTIN_DATA_PATH = os.path.join(BOTOCORE_ROOT, 'data')
# For convenience we automatically add ~/.aws/models to the data path.
CUSTOMER_DATA_PATH = os.path.join(os.path.expanduser('~'),
                              '.aws', 'models')

BOTOCORE_ROOT应该在那里获取这些文件。当部署到Android上时,BOTOCORE_ROOT/data/data/com.phyto.phytogp/files/app/lib/python2.7/site-packages/botocore

endpoints.json就存在于这条路径上。将endpoints.json从平板电脑传输到PC机,调用JSONFileLoaderload_file方法运行良好,并在没有解码失败的情况下返回OrderedDict

堆栈跟踪没有显示它通过引发DataNotFoundError找不到文件,这意味着它找到了该文件,但是无法解析它,从而导致了json/decoder错误。

我尝试过将boto3和依赖关系强制到本地使用的相同版本,但没有任何好处。APK是在虚拟机上构建的,有以下规范:

Buildozer.spec

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[app]

# (str) Title of your application
title = PhytoGP

# (str) Package name
package.name = phytogp

# (str) Package domain (needed for android/ios packaging)
package.domain = com.phyto

# (str) Source code where the main.py live
source.dir = .

# (list) Source files to include (let empty to include all the files)
source.include_exts = py,png,jpg,kv,atlas,ttf,db

# (list) List of inclusions using pattern matching
#source.include_patterns = assets/*,images/*.png

# (list) Source files to exclude (let empty to not exclude anything)
#source.exclude_exts = spec

# (list) List of directory to exclude (let empty to not exclude anything)
source.exclude_dirs = tests, bin

# (list) List of exclusions using pattern matching
#source.exclude_patterns = license,images/*/*.jpg

# (str) Application versioning (method 1)
version = 0.1

# (str) Application versioning (method 2)
# version.regex = __version__ = ['"](.*)['"]
# version.filename = %(source.dir)s/main.py

# (list) Application requirements
# comma seperated e.g. requirements = sqlite3,kivy
requirements = kivy,sqlite3,boto3==1.4.1,botocore==1.5.78,python-dateutil==2.6.0,jmespath==0.9.3,openssl,sparkpost,urllib3,requests,xhtml2pdf,reportlab,html5lib==1.0b8,webencodings,git+https://gitlab.com/kivymd/KivyMD.git

# (str) Custom source folders for requirements
# Sets custom source for any requirements with recipes
# requirements.source.kivy = ../../kivy

# (list) Garden requirements
#garden_requirements =

# (str) Presplash of the application
presplash.filename = %(source.dir)s/assets/presplash.png

# (str) Icon of the application
icon.filename = %(source.dir)s/assets/icon.png

# (str) Supported orientation (one of landscape, portrait or all)
orientation = landscape

# (list) List of service to declare
#services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY

#
# OSX Specific
#

#
# author = © Copyright Info

#
# Android specific
#

# (bool) Indicate if the application should be fullscreen or not
fullscreen = 1

# (list) Permissions
android.permissions = INTERNET

# (int) Android API to use
#android.api = 19

# (int) Minimum API required
#android.minapi = 9

# (int) Android SDK version to use
#android.sdk = 20

# (str) Android NDK version to use
#android.ndk = 9c

# (bool) Use --private data storage (True) or --dir public storage (False)
#android.private_storage = True

# (str) Android NDK directory (if empty, it will be automatically downloaded.)
#android.ndk_path =

# (str) Android SDK directory (if empty, it will be automatically downloaded.)
#android.sdk_path =

# (str) ANT directory (if empty, it will be automatically downloaded.)
#android.ant_path =

# (str) python-for-android git clone directory (if empty, it will be automatically cloned from github)
#android.p4a_dir =

# (str) The directory in which python-for-android should look for your own build recipes (if any)
#p4a.local_recipes =

# (str) Filename to the hook for p4a
#p4a.hook =

# (list) python-for-android whitelist
#android.p4a_whitelist =

# (bool) If True, then skip trying to update the Android sdk
# This can be useful to avoid excess Internet downloads or save time
# when an update is due and you just want to test/build your package
# android.skip_update = False

# (str) Bootstrap to use for android builds (android_new only)
# android.bootstrap = sdl2

# (str) Android entry point, default is ok for Kivy-based app
#android.entrypoint = org.renpy.android.PythonActivity

# (list) List of Java .jar files to add to the libs so that pyjnius can access
# their classes. Don't add jars that you do not need, since extra jars can slow
# down the build process. Allows wildcards matching, for example:
# OUYA-ODK/libs/*.jar
#android.add_jars = foo.jar,bar.jar,path/to/more/*.jar

# (list) List of Java files to add to the android project (can be java or a
# directory containing the files)
#android.add_src =

# (str) python-for-android branch to use, if not master, useful to try
# not yet merged features.
#android.branch = master

# (str) OUYA Console category. Should be one of GAME or APP
# If you leave this blank, OUYA support will not be enabled
#android.ouya.category = GAME

# (str) Filename of OUYA Console icon. It must be a 732x412 png image.
#android.ouya.icon.filename = %(source.dir)s/data/ouya_icon.png

# (str) XML file to include as an intent filters in <activity> tag
#android.manifest.intent_filters =

# (list) Android additionnal libraries to copy into libs/armeabi
#android.add_libs_armeabi = libs/android/*.so
#android.add_libs_armeabi_v7a = libs/android-v7/*.so
#android.add_libs_x86 = libs/android-x86/*.so
#android.add_libs_mips = libs/android-mips/*.so

# (bool) Indicate whether the screen should stay on
# Don't forget to add the WAKE_LOCK permission if you set this to True
#android.wakelock = False

# (list) Android application meta-data to set (key=value format)
#android.meta_data =

# (list) Android library project to add (will be added in the
# project.properties automatically.)
#android.library_references =

# (str) Android logcat filters to use
#android.logcat_filters = *:S python:D

# (bool) Copy library instead of making a libpymodules.so
#android.copy_libs = 1

# (str) The Android arch to build for, choices: armeabi-v7a, arm64-v8a, x86
android.arch = armeabi-v7a

#
# iOS specific
#

# (str) Path to a custom kivy-ios folder
#ios.kivy_ios_dir = ../kivy-ios

# (str) Name of the certificate to use for signing the debug version
# Get a list of available identities: buildozer ios list_identities
#ios.codesign.debug = "iPhone Developer: <lastname> <firstname> (<hexstring>)"

# (str) Name of the certificate to use for signing the release version
#ios.codesign.release = %(ios.codesign.debug)s


[buildozer]

# (int) Log level (0 = error only, 1 = info, 2 = debug (with command output))
log_level = 2

# (int) Display warning if buildozer is run as root (0 = False, 1 = True)
warn_on_root = 1

# (str) Path to build artifact storage, absolute or relative to spec file
build_dir = /build/phytogp

# (str) Path to build output (i.e. .apk, .ipa) storage
# bin_dir = ./bin

#    -----------------------------------------------------------------------------
#    List as sections
#
#    You can define all the "list" as [section:key].
#    Each line will be considered as a option to the list.
#    Let's take [app] / source.exclude_patterns.
#    Instead of doing:
#
#[app]
#source.exclude_patterns = license,data/audio/*.wav,data/images/original/*
#
#    This can be translated into:
#
#[app:source.exclude_patterns]
#license
#data/audio/*.wav
#data/images/original/*
#


#    -----------------------------------------------------------------------------
#    Profiles
#
#    You can extend section / key with a profile
#    For example, you want to deploy a demo version of your application without
#    HD content. You could first change the title to add "(demo)" in the name
#    and extend the excluded directories to remove the HD content.
#
#[app@demo]
#title = My Application (demo)
#
#[app:source.exclude_patterns@demo]
#images/hd/*
#
#    Then, invoke the command line with the "demo" profile:
#
#buildozer --profile demo android debug

SSL通信在部署和与SparkPost和另一个第三方API对话时运行良好。

我没有主意了,所以任何帮助都会很好。谢谢

EN

回答 2

Stack Overflow用户

发布于 2017-10-23 17:43:14

几天的工作,发现没有解决不寻常的JSON解析问题。最后,回滚到boto (v2),它还没有实现确定端点等的JSON模型。

AWS和boto3的区别是什么?

票数 1
EN

Stack Overflow用户

发布于 2019-04-05 10:21:22

Boto3现在使用(P4A)和python3.7。

当这个问题第一次发布时,Boto3和Boto都没有研究P4A/Python3 3。

需求是: android、python3==3.7、kivy、boto3、botocore、urllib3、python3==3.7、jmespath、s3transfer。

我相信您也可能需要openssl。我使用的是numpy,它在菜谱中包含了openssl。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46825756

复制
相关文章
[ 物联网篇 ] 03 - Yocto Project (YP)构建 Alexa SDK
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z2066411585/article/details/89159268
程序手艺人
2019/04/18
1.6K0
怎么使用 Yocto 构建文件系统?
Yocto项目使用更强大和定制化的方法,来构建出适合嵌入式产品的Linux系统。Yocto不仅仅是一个制做文件系统工具,同时提供整套的基于Linux的开发和维护工作流程,使底层嵌入式开发者和上层应用开发者在统一的框架下开发,解决了传统开发方式下零散和无管理的开发形态。
韦东山
2022/05/05
2.3K0
怎么使用 Yocto 构建文件系统?
yocto 离线编译
使用yocto编译一个软件包时,一般会先在本地寻找下载好的源码包,如果不存在则根据配置从网络下载。
zqb_all
2019/12/27
2.6K0
如何为稳定的云堆栈构建基础?
在我们完成云堆栈的构建工作——即实现平台即服务(简称PaaS)、规模化容器乃至开发工具集中的各类工具选项——之前,我们首先需要建立良好的操作系统基础以支持这些容器系统。 对于云堆栈而言,良好的基础应当
静一
2018/03/26
1.1K0
如何为稳定的云堆栈构建基础?
buildroot是什么_yocto buildroot
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说buildroot是什么_yocto buildroot,希望能够帮助大家进步!!!
Java架构师必看
2022/09/18
1.3K0
buildroot是什么_yocto buildroot
Elasticsearch6.1.2源码下载和编译构建
为了深入学习elasticsearch,研究其源码是种有效途径,本文简述了从下载到编译构建再运行起来的全部过程;
程序员欣宸
2019/05/29
1.2K0
Elasticsearch6.1.2源码下载和编译构建
【项目管理和构建】——Maven下载、安装和配置(二)
前言 在上篇博文【项目管理和构建】——Maven简介(一)中我们了解到maven是一种全新的项目构建方式,让我们的开发更加简单,高效。Maven主要做的是两件事: 统一开发规范与工具 统一管理jar包 这两件事情他都做到了,而且还做了更多的事情。Maven还可以管理项目的整个声明周期,包括编 译,构建,测试,发布,报告等等。目前Apache下绝大多数项目都已经采用Maven进行管理。而Maven本身还支持多种插件,可以方便更灵活的控制项目。 工欲善其事,必先利其器。咱们也来玩玩 Maven 这货
MonroeCode
2018/02/09
6880
【项目管理和构建】——Maven下载、安装和配置(二)
如何为Tensorflow构建自定义数据集
Tensorflow激发开发人员在几乎任何想到的领域中尝试他们令人兴奋的AI创意。ML社区中有三个众所周知的因素构成了一个好的深度神经网络模型做了一些神奇的事情。
代码医生工作室
2019/06/21
1.9K0
如何为Tensorflow构建自定义数据集
[ 物联网篇 ] 02 - Yocto Project (YP)快速入门
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z2066411585/article/details/89049111
程序手艺人
2019/04/18
4.8K0
[ 物联网篇 ] 02 - Yocto Project (YP)快速入门
管理-Tomcat和Resin如何配置对指定后缀文件(如:.pptx)下载支持
1. Tomcat,只需要在apache-tomcat-7.0.75\conf\web.xml中配置对应的mime-mapping就行。
秋日芒草
2019/03/15
7720
管理-Tomcat和Resin如何配置对指定后缀文件(如:.pptx)下载支持
构建面向IT性能的运维组织
在复杂的IT运维组织事务活动中,如何确定IT运维的目标,对于很多运维组织来说也是一个难点。有些运维组织用的是稳定性/可用性/质量的指标,有些团队用的是效率,有些团队用的成本指标等等。说实话,在以上诸多指标中,能够带来巨大变革力和牵引力的,我个人认为还是效率,或者是性能,就是完成某个事情有多快。但很多时候,需要对这个IT性能形成精确的理解,才能形成真正的作用力。
用户1593318
2019/11/20
8080
构建面向IT性能的运维组织
如何查看和复制PetaLinux(Yocto)的wic文件中的内容
使用“wic ls”命令,ls”查看wic文件里的分区和文件。 使用“wic cp”命令,在Linux Host和wic文件的分区之间,复制文件。 使用“wic rm”删除wic文件里的文件。
hankfu
2022/09/27
2.5K0
构建一个适合stm32mp157系列开发板的嵌入式Linux系统
Linux平台上有许多开源的嵌入式linux系统构建框架(框架的意思就是工具),这些框架极大的方便了开发者进行嵌入式系统的定制化构建,目前比较常见的有OpenWrt, Buildroot, Yocto,等等。其中Buildroot功能强大,使用简单,而且采用了类似于linux kernel的配置和编译框架,所以受到广大嵌入式开发人员的欢迎。
韦东山
2020/10/14
5K0
构建嵌入式 Linux 系统的4种有效工具
Linux 被部署到比 Linus Torvalds 在他的宿舍里开发时所预期的更广泛的设备。令人震惊的支持了各种芯片,使得Linux 可以应用于大大小小的设备上:从 IBM 的巨型机到不如其连接的端口大的微型设备,以及各种大小的设备。它被用于大型企业数据中心、互联网基础设施设备和个人的开发系统。它还为消费类电子产品、移动电话和许多物联网设备提供了动力。
全栈程序员站长
2021/06/10
3K0
何为真何为假
还记得第一个提出日心说的人是谁么? 没错, 哥白尼. 但是在那个年代, 所有人都认为太阳围绕着地球转的年代. 哥白尼的发现打破了大家的常识, 甚至于有过了很多年, 日心说才逐渐被大众所接受. 即使到了
烟草的香味
2020/06/09
9710
构建数据中台的三要素:方法论、组织和技术
盖房前,先得设计图纸,知道如何盖这房?然后还要有好用工具(如水泥搅拌机、钢筋切割机)帮你盖好这房。盖房子离不开一个靠谱施工队伍,这里面涉及很多角色(泥瓦工、木工、水电工等等),人须高效协作,才能盖出好房。
JavaEdge
2023/07/21
9840
构建数据中台的三要素:方法论、组织和技术
【Yocto】devtool修改源代码「建议收藏」
如果想要修改Poky项目中的源代码,可以依赖于devtool工具,这里以修改busybox为例。
全栈程序员站长
2022/11/10
1.8K0
【Yocto】devtool修改源代码「建议收藏」
yocto-sumo源码解析(一): o
oe-init-build-env是yocto构建环境运行的第一个脚本,通过运行下面的命令:
py3study
2020/01/19
1.3K0
yocto-sumo源码解析(一): o
「数据架构」:如何为MDM构建业务用例
在了解了当前的功能之后,是时候评估MDM成熟度了。MDM成熟度可以通过五个维度进行评估:
架构师研究会
2018/09/21
5410
「数据架构」:如何为MDM构建业务用例
何为http,何为RPC?
RPC(即Remote Procedure Call,远程过程调用)和HTTP(HyperText Transfer Protocol,超文本传输协议)他们最本质的区别,就是RPC主要工作在TCP协议之上,而HTTP服务主要是工作在HTTP协议之上,我们都知道HTTP协议是在传输层协议TCP之上的,所以效率来看的话,RPC当然是要更胜一筹。
Java架构
2019/06/15
1.4K0

相似问题

通过Bloomberg API拉取债券CUSIP

16

带有ISIN的Bloomberg BDH函数

35

将9位CUSIP代码转换为ISIN代码

21

从Python文本中提取ISIN、Cusip和其他模式

53

使用Excel公式从Bloomberg获取Code Isin

157
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文