You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy打包APK后Python类导入失败,请求问题排查帮助

Kivy打包APK导入错误解决方案

核心问题

你的项目目录缺少__init__.py文件,导致Python打包工具(如Buildozer)无法将libs和libs/baseclass识别为合法的Python包。本地运行时Python会自动将当前目录加入搜索路径,所以能正常导入,但打包后路径环境变化,就会触发导入错误。

解决步骤

1. 添加__init__.py文件

给libs和libs/baseclass目录都创建空的__init__.py文件,修改后的项目结构如下:

Myapp
  - libs
    - __init__.py
    - baseclass
      - __init__.py
      - main_screen.py
    - kvs
       所有kv文件存放于此
  - main.kv
  - main.py

2. 保留原kv文件导入语句

不需要修改main.kv里的导入,保持原来的写法即可:

#:kivy 2.1.0

#: import SplashScreen libs.baseclass.main_screen.SplashScreen
#: import LoginScreen libs.baseclass.main_screen.LoginScreen
#: import SignupScreen libs.baseclass.main_screen.SignupScreen
#: import TopicsScreen libs.baseclass.main_screen.TopicsScreen
#: import SubTopicsScreen libs.baseclass.main_screen.SubTopicsScreen

#: include libs/kvs/splash_screen.kv
#: include libs/kvs/login_screen.kv
#: include libs/kvs/signup_screen.kv
#: include libs/kvs/topics_screen.kv
#: include libs/kvs/sub_topics_screen.kv


ScreenManager:
    SplashScreen:
    LoginScreen:
    SignupScreen:
    TopicsScreen:
    SubTopicsScreen:

3. 在main.py中显式导入模块

在main.py的开头添加以下导入语句,确保打包工具能识别到这些模块并将其包含进APK:

from libs.baseclass.main_screen import (
    SplashScreen,
    LoginScreen,
    SignupScreen,
    TopicsScreen,
    SubTopicsScreen
)

4. 检查Buildozer配置(如果用Buildozer打包)

打开buildozer.spec文件,确认以下配置项正确:

# 确保包含必要的文件类型
source.include_exts = py,png,jpg,kv,atlas
# 确保libs目录被包含
source.include_dirs = libs

原理说明

  • Python通过目录下的__init__.py识别包结构,没有这个文件的目录无法被作为包导入。
  • 打包工具(如Buildozer)会扫描代码中的显式导入来决定哪些文件需要打包,main.py里的显式导入能避免模块被遗漏。
  • 本地运行时Python的路径搜索机制更宽松,但打包后必须严格遵循Python包规范。

内容的提问来源于stack exchange,提问作者Swati

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:20:35