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
相关产品推荐
相关产品推荐

