ModuleNotFoundError: No module named ‘cachetools’

huangapple go评论110阅读模式
英文:

kivy buildozer android ModuleNotFoundError: No module named 'cachetools'

问题

我试图做什么
用kivy和gspread创建一个简单的Python应用程序。我的代码只包含身份验证,没有其他内容。在电脑上完美运行,在Android上崩溃。

我采取的解决步骤
adb install bin/myapp-0.1-arm64-v8a_armeabi-v7a-debug.apk
adb logcat -s "python"
这会产生依赖错误。这个问题在stackoverflow上有很多。所以我按照建议在buildozer.spec文件中不断添加必要的包。然而,即使在buildozer.spec中添加了,我也无法进一步解决最新的问题。任何提示都将非常有帮助。

到目前为止在buildozer spec中提到的要求
requirements = python3,kivy,gspread,oauth2client,google,google-auth,google-auth-oauthlib,httplib2,cachetools

确切的问题是什么

  1. 05-21 07:53:13.709 1554 1618 I python : ModuleNotFoundError: No module named 'cachetools'
  2. 05-21 07:53:13.709 1554 1618 I python : Python for android ended.

kivy代码

  1. import kivy
  2. from kivy.app import App
  3. from kivy.uix.label import Label
  4. from kivy.uix.gridlayout import GridLayout
  5. from kivy.uix.textinput import TextInput
  6. from kivy.uix.button import Button
  7. # Import google apis
  8. import gspread
  9. from oauth2client.service_account import ServiceAccountCredentials
  10. credentials = {
  11. "type": "service_account",
  12. "project_id": "mutualfund-368405",
  13. "private_key_id": "501e307a15dd3d8433267169b848b97d4cabd6d2",
  14. "private_key": "-----BEGIN PRIVATE KEY-----\nremoved for obvious reason-----END PRIVATE KEY-----\n",
  15. "client_email": "blah@blah.iam.gserviceaccount.com",
  16. "client_id": "106035766744103767919",
  17. "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  18. "token_uri": "https://oauth2.googleapis.com/token",
  19. "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  20. "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/mfserviceaccount%40mutualfund-368405.iam.gserviceaccount.com",
  21. "universe_domain": "googleapis.com"
  22. }
  23. class MyApp(App):
  24. def build(self):
  25. gc = gspread.service_account_from_dict(credentials)
  26. sheet = gc.open("LockerDB")
  27. return Label(text=str(sheet.sheet1.get("A1")))
  28. if __name__ == '__main__':
  29. MyApp().run()

完整的spec文件

  1. [app]
  2. # (str) Title of your application
  3. title = My Application
  4. # (str) Package name
  5. package.name = myapp
  6. # (str) Package domain (needed for android/ios packaging)
  7. package.domain = org.test
  8. # (str) Source code where the main.py live
  9. source.dir = .
  10. # (list) Source files to include (let empty to include all the files)
  11. source.include_exts = py,png,jpg,kv,atlas
  12. # (list) List of inclusions using pattern matching
  13. #source.include_patterns = assets/*,images/*.png
  14. # (list) Source files to exclude (let empty to not exclude anything)
  15. #source.exclude_exts = spec
  16. # (list) List of directory to exclude (let empty to not exclude anything)
  17. #source.exclude_dirs = tests, bin, venv
  18. # (list) List of exclusions using pattern matching
  19. # Do not prefix with './'
  20. #source.exclude_patterns = license,images/*/*.jpg
  21. # (str) Application versioning (method 1)
  22. version = 0.1
  23. # (str) Application versioning (method 2)
  24. # version.regex = __version__ = ['"](.*)['"]
  25. # version.filename = %(source.dir)s/main.py
  26. # (list) Application requirements
  27. # comma separated e.g. requirements = sqlite3,kivy
  28. requirements = python3,kivy,gspread,oauth2client,google,google-auth,google-auth-oauthlib,httplib2,cachetools
  29. # (str) Custom source folders for requirements
  30. # Sets custom source for any requirements with recipes
  31. # requirements.source.kivy = ../../kivy
  32. # (str) Presplash of the application
  33. #presplash.filename = %(source.dir)s/data/presplash.png
  34. # (str) Icon of the application
  35. #icon.filename = %(source.dir)s/data/icon.png
  36. # (str) Supported orientation (one of landscape, sensorLandscape, portrait or all)
  37. orientation = portrait
  38. # (list) List of service to declare
  39. #services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY
  40. #
  41. # OSX Specific
  42. #
  43. #
  44. # author = © Copyright Info
  45. # change the major version of python used by the app
  46. osx.python_version = 3
  47. # Kivy version to use
  48. osx.kivy_version = 1.9.1
  49. #
  50. # Android specific
  51. #
  52. # (bool) Indicate if the application should be fullscreen or not
  53. fullscreen = 0
  54. # (string) Presplash background color (for android toolchain)
  55. # Supported formats are: #RRGGBB #AARRGGBB or one of the following names:
  56. # red, blue, green, black, white, gray, cyan, magenta, yellow, lightgray,
  57. # darkgray, grey, lightgrey, darkgrey, aqua, fuchsia, lime, maroon, navy,
  58. # olive, purple, silver, teal.
  59. #android.presplash_color = #FFFFFF
  60. # (string) Presplash animation using Lottie format.
  61. # see https://lottiefiles.com/ for examples and https://airbnb.design/lottie/
  62. # for general documentation.
  63. # Lottie files can be created using various tools, like Adobe After Effect or Synfig.
  64. #android.presplash_lottie = "path/to/lottie/file.json"
  65. # (str) Adaptive icon of the application (used if Android API level is 26+ at runtime)
  66. #icon.adaptive_foreground.filename = %(source.dir)s/data/icon_fg.png
  67. #icon.adaptive_background.filename = %(source.dir)s/data/icon_bg.png
  68. # (list) Permissions
  69. android.permissions = INTERNET
  70. # (list) features (adds uses-feature -tags to manifest)
  71. #android.features = android.hardware.usb.host
  72. # (int) Target Android API, should be as high as possible.
  73. #android.api = 27
  74. # (int) Minimum API your APK / AAB will support.
  75. android.min
  76. <details>
  77. <summary>英文:</summary>
  78. **What am I trying to do**:
  79. Simple python kivy application with gspread. My code only has the authentication and nothing more. Works perfectly in pc. App crashes on android.
  80. **What steps did I follow to solve**:
  81. `adb install bin/myapp-0.1-arm64-v8a_armeabi-v7a-debug.apk`
  82. `adb logcat -s &quot;python&quot;`
  83. This gives dependency error. This problem is flooded in stackoverflow. So I followed the suggestions and kept adding the necessary packages in buildozer.spec file. However, the latest problem I am not able to resolve any further, even after adding to buildozer.spec. Any hint would be very helpful.
  84. **requirements mentioned in buildozer spec so far**
  85. `requirements = python3,kivy,gspread,oauth2client,google,google-auth,google-auth-oauthlib,httplib2,cachetools`
  86. **What is the exact issue**

05-21 07:53:13.707 1554 1618 I python : Traceback (most recent call last):
05-21 07:53:13.707 1554 1618 I python : File "/home/jayanta/Downloads/kivy/.buildozer/android/app/main.py", line 9, in <module>
05-21 07:53:13.707 1554 1618 I python : File "/home/jayanta/Downloads/kivy/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/python-installs/myapp/arm64-v8a/gspread/init.py", line 16, in <module>
05-21 07:53:13.708 1554 1618 I python : File "/home/jayanta/Downloads/kivy/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/python-installs/myapp/arm64-v8a/gspread/auth.py", line 14, in <module>
05-21 07:53:13.708 1554 1618 I python : File "/home/jayanta/Downloads/kivy/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/python-installs/myapp/arm64-v8a/google/oauth2/credentials.py", line 45, in <module>
05-21 07:53:13.708 1554 1618 I python : File "/home/jayanta/Downloads/kivy/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/python-installs/myapp/arm64-v8a/google/oauth2/reauth.py", line 40, in <module>
05-21 07:53:13.708 1554 1618 I python : File "/home/jayanta/Downloads/kivy/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/python-installs/myapp/arm64-v8a/google/oauth2/_client.py", line 36, in <module>
05-21 07:53:13.708 1554 1618 I python : File "/home/jayanta/Downloads/kivy/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/python-installs/myapp/arm64-v8a/google/auth/jwt.py", line 52, in <module>
05-21 07:53:13.709 1554 1618 I python : ModuleNotFoundError: No module named 'cachetools'
05-21 07:53:13.709 1554 1618 I python : Python for android ended.

  1. **kivy code**
  2. ```Python
  3. import kivy
  4. from kivy.app import App
  5. from kivy.uix.label import Label
  6. from kivy.uix.gridlayout import GridLayout
  7. from kivy.uix.textinput import TextInput
  8. from kivy.uix.button import Button
  9. # Import google apis
  10. import gspread
  11. from oauth2client.service_account import ServiceAccountCredentials
  12. credentials = {
  13. &quot;type&quot;: &quot;service_account&quot;,
  14. &quot;project_id&quot;: &quot;mutualfund-368405&quot;,
  15. &quot;private_key_id&quot;: &quot;501e307a15dd3d8433267169b848b97d4cabd6d2&quot;,
  16. &quot;private_key&quot;: &quot;-----BEGIN PRIVATE KEY-----\nremoved for obvious reason-----END PRIVATE KEY-----\n&quot;,
  17. &quot;client_email&quot;: &quot;blah@blah.iam.gserviceaccount.com&quot;,
  18. &quot;client_id&quot;: &quot;106035766744103767919&quot;,
  19. &quot;auth_uri&quot;: &quot;https://accounts.google.com/o/oauth2/auth&quot;,
  20. &quot;token_uri&quot;: &quot;https://oauth2.googleapis.com/token&quot;,
  21. &quot;auth_provider_x509_cert_url&quot;: &quot;https://www.googleapis.com/oauth2/v1/certs&quot;,
  22. &quot;client_x509_cert_url&quot;: &quot;https://www.googleapis.com/robot/v1/metadata/x509/mfserviceaccount%40mutualfund-368405.iam.gserviceaccount.com&quot;,
  23. &quot;universe_domain&quot;: &quot;googleapis.com&quot;
  24. }
  25. class MyApp(App):
  26. def build(self):
  27. gc = gspread.service_account_from_dict(credentials)
  28. sheet = gc.open(&quot;LockerDB&quot;)
  29. return Label(text=str(sheet.sheet1.get(&quot;A1&quot;)))
  30. if __name__ == &#39;__main__&#39;:
  31. MyApp().run()

complete spec file

  1. [app]
  2. # (str) Title of your application
  3. title = My Application
  4. # (str) Package name
  5. package.name = myapp
  6. # (str) Package domain (needed for android/ios packaging)
  7. package.domain = org.test
  8. # (str) Source code where the main.py live
  9. source.dir = .
  10. # (list) Source files to include (let empty to include all the files)
  11. source.include_exts = py,png,jpg,kv,atlas
  12. # (list) List of inclusions using pattern matching
  13. #source.include_patterns = assets/*,images/*.png
  14. # (list) Source files to exclude (let empty to not exclude anything)
  15. #source.exclude_exts = spec
  16. # (list) List of directory to exclude (let empty to not exclude anything)
  17. #source.exclude_dirs = tests, bin, venv
  18. # (list) List of exclusions using pattern matching
  19. # Do not prefix with &#39;./&#39;
  20. #source.exclude_patterns = license,images/*/*.jpg
  21. # (str) Application versioning (method 1)
  22. version = 0.1
  23. # (str) Application versioning (method 2)
  24. # version.regex = __version__ = [&#39;&quot;](.*)[&#39;&quot;]
  25. # version.filename = %(source.dir)s/main.py
  26. # (list) Application requirements
  27. # comma separated e.g. requirements = sqlite3,kivy
  28. requirements = python3,kivy,gspread,oauth2client,google,google-auth,google-auth-oauthlib,httplib2,cachetools
  29. # (str) Custom source folders for requirements
  30. # Sets custom source for any requirements with recipes
  31. # requirements.source.kivy = ../../kivy
  32. # (str) Presplash of the application
  33. #presplash.filename = %(source.dir)s/data/presplash.png
  34. # (str) Icon of the application
  35. #icon.filename = %(source.dir)s/data/icon.png
  36. # (str) Supported orientation (one of landscape, sensorLandscape, portrait or all)
  37. orientation = portrait
  38. # (list) List of service to declare
  39. #services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY
  40. #
  41. # OSX Specific
  42. #
  43. #
  44. # author = &#169; Copyright Info
  45. # change the major version of python used by the app
  46. osx.python_version = 3
  47. # Kivy version to use
  48. osx.kivy_version = 1.9.1
  49. #
  50. # Android specific
  51. #
  52. # (bool) Indicate if the application should be fullscreen or not
  53. fullscreen = 0
  54. # (string) Presplash background color (for android toolchain)
  55. # Supported formats are: #RRGGBB #AARRGGBB or one of the following names:
  56. # red, blue, green, black, white, gray, cyan, magenta, yellow, lightgray,
  57. # darkgray, grey, lightgrey, darkgrey, aqua, fuchsia, lime, maroon, navy,
  58. # olive, purple, silver, teal.
  59. #android.presplash_color = #FFFFFF
  60. # (string) Presplash animation using Lottie format.
  61. # see https://lottiefiles.com/ for examples and https://airbnb.design/lottie/
  62. # for general documentation.
  63. # Lottie files can be created using various tools, like Adobe After Effect or Synfig.
  64. #android.presplash_lottie = &quot;path/to/lottie/file.json&quot;
  65. # (str) Adaptive icon of the application (used if Android API level is 26+ at runtime)
  66. #icon.adaptive_foreground.filename = %(source.dir)s/data/icon_fg.png
  67. #icon.adaptive_background.filename = %(source.dir)s/data/icon_bg.png
  68. # (list) Permissions
  69. android.permissions = INTERNET
  70. # (list) features (adds uses-feature -tags to manifest)
  71. #android.features = android.hardware.usb.host
  72. # (int) Target Android API, should be as high as possible.
  73. #android.api = 27
  74. # (int) Minimum API your APK / AAB will support.
  75. android.minapi = 31
  76. # (int) Android SDK version to use
  77. #android.sdk = 20
  78. # (str) Android NDK version to use
  79. #android.ndk = 23b
  80. # (int) Android NDK API to use. This is the minimum API your app will support, it should usually match android.minapi.
  81. #android.ndk_api = 21
  82. # (bool) Use --private data storage (True) or --dir public storage (False)
  83. #android.private_storage = True
  84. # (str) Android NDK directory (if empty, it will be automatically downloaded.)
  85. #android.ndk_path =
  86. # (str) Android SDK directory (if empty, it will be automatically downloaded.)
  87. #android.sdk_path =
  88. # (str) ANT directory (if empty, it will be automatically downloaded.)
  89. #android.ant_path =
  90. # (bool) If True, then skip trying to update the Android sdk
  91. # This can be useful to avoid excess Internet downloads or save time
  92. # when an update is due and you just want to test/build your package
  93. # android.skip_update = False
  94. # (bool) If True, then automatically accept SDK license
  95. # agreements. This is intended for automation only. If set to False,
  96. # the default, you will be shown the license when first running
  97. # buildozer.
  98. # android.accept_sdk_license = False
  99. # (str) Android entry point, default is ok for Kivy-based app
  100. #android.entrypoint = org.kivy.android.PythonActivity
  101. # (str) Full name including package path of the Java class that implements Android Activity
  102. # use that parameter together with android.entrypoint to set custom Java class instead of PythonActivity
  103. #android.activity_class_name = org.kivy.android.PythonActivity
  104. # (str) Extra xml to write directly inside the &lt;manifest&gt; element of AndroidManifest.xml
  105. # use that parameter to provide a filename from where to load your custom XML code
  106. #android.extra_manifest_xml = ./src/android/extra_manifest.xml
  107. # (str) Extra xml to write directly inside the &lt;manifest&gt;&lt;application&gt; tag of AndroidManifest.xml
  108. # use that parameter to provide a filename from where to load your custom XML arguments:
  109. #android.extra_manifest_application_arguments = ./src/android/extra_manifest_application_arguments.xml
  110. # (str) Full name including package path of the Java class that implements Python Service
  111. # use that parameter to set custom Java class instead of PythonService
  112. #android.service_class_name = org.kivy.android.PythonService
  113. # (str) Android app theme, default is ok for Kivy-based app
  114. # android.apptheme = &quot;@android:style/Theme.NoTitleBar&quot;
  115. # (list) Pattern to whitelist for the whole project
  116. #android.whitelist =
  117. # (str) Path to a custom whitelist file
  118. #android.whitelist_src =
  119. # (str) Path to a custom blacklist file
  120. #android.blacklist_src =
  121. # (list) List of Java .jar files to add to the libs so that pyjnius can access
  122. # their classes. Don&#39;t add jars that you do not need, since extra jars can slow
  123. # down the build process. Allows wildcards matching, for example:
  124. # OUYA-ODK/libs/*.jar
  125. #android.add_jars = foo.jar,bar.jar,path/to/more/*.jar
  126. # (list) List of Java files to add to the android project (can be java or a
  127. # directory containing the files)
  128. #android.add_src =
  129. # (list) Android AAR archives to add
  130. #android.add_aars =
  131. # (list) Put these files or directories in the apk assets directory.
  132. # Either form may be used, and assets need not be in &#39;source.include_exts&#39;.
  133. # 1) android.add_assets = source_asset_relative_path
  134. # 2) android.add_assets = source_asset_path:destination_asset_relative_path
  135. #android.add_assets =
  136. # (list) Gradle dependencies to add
  137. #android.gradle_dependencies =
  138. # (bool) Enable AndroidX support. Enable when &#39;android.gradle_dependencies&#39;
  139. # contains an &#39;androidx&#39; package, or any package from Kotlin source.
  140. # android.enable_androidx requires android.api &gt;= 28
  141. #android.enable_androidx = False
  142. # (list) add java compile options
  143. # this can for example be necessary when importing certain java libraries using the &#39;android.gradle_dependencies&#39; option
  144. # see https://developer.android.com/studio/write/java8-support for further information
  145. # android.add_compile_options = &quot;sourceCompatibility = 1.8&quot;, &quot;targetCompatibility = 1.8&quot;
  146. # (list) Gradle repositories to add {can be necessary for some android.gradle_dependencies}
  147. # please enclose in double quotes
  148. # e.g. android.gradle_repositories = &quot;maven { url &#39;https://kotlin.bintray.com/ktor&#39; }&quot;
  149. #android.add_gradle_repositories =
  150. # (list) packaging options to add
  151. # see https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.PackagingOptions.html
  152. # can be necessary to solve conflicts in gradle_dependencies
  153. # please enclose in double quotes
  154. # e.g. android.add_packaging_options = &quot;exclude &#39;META-INF/common.kotlin_module&#39;&quot;, &quot;exclude &#39;META-INF/*.kotlin_module&#39;&quot;
  155. #android.add_packaging_options =
  156. # (list) Java classes to add as activities to the manifest.
  157. #android.add_activities = com.example.ExampleActivity
  158. # (str) OUYA Console category. Should be one of GAME or APP
  159. # If you leave this blank, OUYA support will not be enabled
  160. #android.ouya.category = GAME
  161. # (str) Filename of OUYA Console icon. It must be a 732x412 png image.
  162. #android.ouya.icon.filename = %(source.dir)s/data/ouya_icon.png
  163. # (str) XML file to include as an intent filters in &lt;activity&gt; tag
  164. #android.manifest.intent_filters =
  165. # (str) launchMode to set for the main activity
  166. #android.manifest.launch_mode = standard
  167. # (list) Android additional libraries to copy into libs/armeabi
  168. #android.add_libs_armeabi = libs/android/*.so
  169. #android.add_libs_armeabi_v7a = libs/android-v7/*.so
  170. #android.add_libs_arm64_v8a = libs/android-v8/*.so
  171. #android.add_libs_x86 = libs/android-x86/*.so
  172. #android.add_libs_mips = libs/android-mips/*.so
  173. # (bool) Indicate whether the screen should stay on
  174. # Don&#39;t forget to add the WAKE_LOCK permission if you set this to True
  175. #android.wakelock = False
  176. # (list) Android application meta-data to set (key=value format)
  177. #android.meta_data =
  178. # (list) Android library project to add (will be added in the
  179. # project.properties automatically.)
  180. #android.library_references =
  181. # (list) Android shared libraries which will be added to AndroidManifest.xml using &lt;uses-library&gt; tag
  182. #android.uses_library =
  183. # (str) Android logcat filters to use
  184. #android.logcat_filters = *:S python:D
  185. # (bool) Android logcat only display log for activity&#39;s pid
  186. #android.logcat_pid_only = False
  187. # (str) Android additional adb arguments
  188. #android.adb_args = -H host.docker.internal
  189. # (bool) Copy library instead of making a libpymodules.so
  190. #android.copy_libs = 1
  191. # (list) The Android archs to build for, choices: armeabi-v7a, arm64-v8a, x86, x86_64
  192. # In past, was `android.arch` as we weren&#39;t supporting builds for multiple archs at the same time.
  193. android.archs = arm64-v8a, armeabi-v7a
  194. # (int) overrides automatic versionCode computation (used in build.gradle)
  195. # this is not the same as app version and should only be edited if you know what you&#39;re doing
  196. # android.numeric_version = 1
  197. # (bool) enables Android auto backup feature (Android API &gt;=23)
  198. android.allow_backup = True
  199. # (str) XML file for custom backup rules (see official auto backup documentation)
  200. # android.backup_rules =
  201. # (str) If you need to insert variables into your AndroidManifest.xml file,
  202. # you can do so with the manifestPlaceholders property.
  203. # This property takes a map of key-value pairs. (via a string)
  204. # Usage example : android.manifest_placeholders = [myCustomUrl:\&quot;org.kivy.customurl\&quot;]
  205. # android.manifest_placeholders = [:]
  206. # (bool) disables the compilation of py to pyc/pyo files when packaging
  207. # android.no-compile-pyo = True
  208. # (str) The format used to package the app for release mode (aab or apk or aar).
  209. # android.release_artifact = aab
  210. # (str) The format used to package the app for debug mode (apk or aar).
  211. # android.debug_artifact = apk
  212. #
  213. # Python for android (p4a) specific
  214. #
  215. # (str) python-for-android URL to use for checkout
  216. #p4a.url =
  217. # (str) python-for-android fork to use in case if p4a.url is not specified, defaults to upstream (kivy)
  218. #p4a.fork = kivy
  219. # (str) python-for-android branch to use, defaults to master
  220. #p4a.branch = master
  221. # (str) python-for-android specific commit to use, defaults to HEAD, must be within p4a.branch
  222. #p4a.commit = HEAD
  223. # (str) python-for-android git clone directory (if empty, it will be automatically cloned from github)
  224. #p4a.source_dir =
  225. # (str) The directory in which python-for-android should look for your own build recipes (if any)
  226. #p4a.local_recipes =
  227. # (str) Filename to the hook for p4a
  228. #p4a.hook =
  229. # (str) Bootstrap to use for android builds
  230. # p4a.bootstrap = sdl2
  231. # (int) port number to specify an explicit --port= p4a argument (eg for bootstrap flask)
  232. #p4a.port =
  233. # Control passing the --use-setup-py vs --ignore-setup-py to p4a
  234. # &quot;in the future&quot; --use-setup-py is going to be the default behaviour in p4a, right now it is not
  235. # Setting this to false will pass --ignore-setup-py, true will pass --use-setup-py
  236. # NOTE: this is general setuptools integration, having pyproject.toml is enough, no need to generate
  237. # setup.py if you&#39;re using Poetry, but you need to add &quot;toml&quot; to source.include_exts.
  238. #p4a.setup_py = false
  239. # (str) extra command line arguments to pass when invoking pythonforandroid.toolchain
  240. #p4a.extra_args =
  241. #
  242. # iOS specific
  243. #
  244. # (str) Path to a custom kivy-ios folder
  245. #ios.kivy_ios_dir = ../kivy-ios
  246. # Alternately, specify the URL and branch of a git checkout:
  247. ios.kivy_ios_url = https://github.com/kivy/kivy-ios
  248. ios.kivy_ios_branch = master
  249. # Another platform dependency: ios-deploy
  250. # Uncomment to use a custom checkout
  251. #ios.ios_deploy_dir = ../ios_deploy
  252. # Or specify URL and branch
  253. ios.ios_deploy_url = https://github.com/phonegap/ios-deploy
  254. ios.ios_deploy_branch = 1.10.0
  255. # (bool) Whether or not to sign the code
  256. ios.codesign.allowed = false
  257. # (str) Name of the certificate to use for signing the debug version
  258. # Get a list of available identities: buildozer ios list_identities
  259. #ios.codesign.debug = &quot;iPhone Developer: &lt;lastname&gt; &lt;firstname&gt; (&lt;hexstring&gt;)&quot;
  260. # (str) The development team to use for signing the debug version
  261. #ios.codesign.development_team.debug = &lt;hexstring&gt;
  262. # (str) Name of the certificate to use for signing the release version
  263. #ios.codesign.release = %(ios.codesign.debug)s
  264. # (str) The development team to use for signing the release version
  265. #ios.codesign.development_team.release = &lt;hexstring&gt;
  266. # (str) URL pointing to .ipa file to be installed
  267. # This option should be defined along with `display_image_url` and `full_size_image_url` options.
  268. #ios.manifest.app_url =
  269. # (str) URL pointing to an icon (57x57px) to be displayed during download
  270. # This option should be defined along with `app_url` and `full_size_image_url` options.
  271. #ios.manifest.display_image_url =
  272. # (str) URL pointing to a large icon (512x512px) to be used by iTunes
  273. # This option should be defined along with `app_url` and `display_image_url` options.
  274. #ios.manifest.full_size_image_url =
  275. [buildozer]
  276. # (int) Log level (0 = error only, 1 = info, 2 = debug (with command output))
  277. log_level = 2
  278. # (int) Display warning if buildozer is run as root (0 = False, 1 = True)
  279. warn_on_root = 1
  280. # (str) Path to build artifact storage, absolute or relative to spec file
  281. # build_dir = ./.buildozer
  282. # (str) Path to build output (i.e. .apk, .aab, .ipa) storage
  283. # bin_dir = ./bin
  284. # -----------------------------------------------------------------------------
  285. # List as sections
  286. #
  287. # You can define all the &quot;list&quot; as [section:key].
  288. # Each line will be considered as a option to the list.
  289. # Let&#39;s take [app] / source.exclude_patterns.
  290. # Instead of doing:
  291. #
  292. #[app]
  293. #source.exclude_patterns = license,data/audio/*.wav,data/images/original/*
  294. #
  295. # This can be translated into:
  296. #
  297. #[app:source.exclude_patterns]
  298. #license
  299. #data/audio/*.wav
  300. #data/images/original/*
  301. #
  302. # -----------------------------------------------------------------------------
  303. # Profiles
  304. #
  305. # You can extend section / key with a profile
  306. # For example, you want to deploy a demo version of your application without
  307. # HD content. You could first change the title to add &quot;(demo)&quot; in the name
  308. # and extend the excluded directories to remove the HD content.
  309. #
  310. #[app@demo]
  311. #title = My Application (demo)
  312. #
  313. #[app:source.exclude_patterns@demo]
  314. #images/hd/*
  315. #
  316. # Then, invoke the command line with the &quot;demo&quot; profile:
  317. #
  318. #buildozer --profile demo android debug

What steps did I follow to solve:
adb install bin/myapp-0.1-arm64-v8a_armeabi-v7a-debug.apk
adb logcat -s &quot;python&quot;
This gives dependency error. This problem is flooded in stackoverflow. So I followed the suggestions and kept adding the necessary packages in buildozer.spec file. However, the latest problem I am not able to resolve any further, even after adding to buildozer.spec. Any hint would be very helpful.

答案1

得分: 2

以下是已翻译的部分:

"我也曾一段时间前使用gspread编写了一个应用程序,并将其移植到了Android。我曾遇到类似的问题,需要添加许多(看似)不相关的要求。我将分享我使用的整个要求列表,因为我不记得确切地将哪个用于什么。但我相当有信心,将其中一些作为要求添加将有助于解决您的问题,因为我曾经遇到过类似的问题(即使已将模块列为要求)。

我的要求列表:

requirements = python3, kivy, gspread, oauth2client, httplib2, pyopenssl, google-auth-oauthlib, pyasn1, pyasn1-modules, rsa, requests, google-auth-httplib2, openssl, google-api-python-client, google-auth, credentials, oauth2, google, cachetools, urllib3, chardet, idna, requests_oauthlib, oauthlib, pyparsing

对于我的模糊回答和无法准确找出缺少的软件包和/或原因,我感到抱歉,但希望这能帮助您通过一些尝试和错误使您的应用程序运行起来,直到有人能够对这个问题给出更令人满意的答案。如果这仍然不适用于您,请告诉我,我会确保更仔细地查看我曾经工作过的项目,因为已经过了一些时间。"

英文:

I also wrote an app a while ago using gspread and ported it to android.
I had a similar issue where I needed to add quite a few of (seemingly) unrelated requirements. I will just share the entire list of requirements I used, as I do not recall exactly which one I used for what. I am however, quite confident that adding some of these as requirements will aid in solving your issue, as I experienced a similar issue (even when indeed having listed the module as requirement).

My list of requirements:

  1. requirements = python3,kivy,gspread,oauth2client,httplib2,pyopenssl,google-auth-oauthlib,pyasn1,pyasn1-modules,rsa,requests,google-auth-httplib2,openssl,google-api-python-client,google-auth,credentials,oauth2,google,cachetools,urllib3,chardet,idna,requests_oauthlib,oauthlib, pyparsing

I am sorry for the vague answer, and not being able to pinpoint exactly the missing package and/or cause, but hopefully this will help you to get your app running with some trail and error until someone can give a more satisfying answer to this question.

Please let me know if this still doesn't work for you, and I will make sure to take a better look at the project I worked on, as it has been some time.

huangapple
  • 本文由 发表于 2023年5月21日 11:10:20
  • 转载请务必保留本文链接:https://go.coder-hub.com/76298142.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定