pyarmor pack打包后运行报No module named 'keyboard'如何解决
PyArmor 打包运行提示缺少keyboard模块修复方案
问题复现
当前使用的打包命令:
pyarmor pack --clean -e "--onefile" main.py
运行打包生成的文件时抛出的报错:
Traceback (most recent call last): File "<dist \obf\ Builder19948 .py>", line 3, in <module> File "<frozen Builder19948> ", line 7, in <module> ModuleNotFoundError: No module named 'keyboard' [12560] Failed to execute script Builder19948 due to unhandled exception!
修复方法
这个问题是PyArmor调用PyInstaller打包时,没有自动识别收集keyboard隐式依赖导致的,哪怕本地代码已经正常导入、运行环境已经安装了模块也可能触发,按以下步骤排查修复即可:
- 修改打包命令,显式指定PyInstaller将keyboard模块作为隐藏导入项打包,注意相关参数必须写在
-e的引号内部,修改后的命令如下:
pyarmor pack --clean -e "--onefile --hidden-import keyboard" main.py
- 如果修改命令后打包仍然报相同错误,先校验当前执行打包命令的Python环境是否安装了keyboard模块,执行以下命令检查:
pip show keyboard
如果命令执行后没有返回模块版本、安装路径等信息,先在当前环境安装对应模块再重新打包:
pip install keyboard
- 如果项目运行在虚拟环境中,必须先激活项目对应的虚拟环境再执行打包命令,不要用全局Python环境的PyArmor给虚拟环境的项目打包,否则会因为全局环境未安装对应依赖出现找不到模块的问题。
如果后续打包运行还提示缺少其他模块,按照相同规则,在-e的引号里追加--hidden-import 缺失模块名即可,多个缺失模块就追加多个对应参数。
内容的提问来源于stack exchange,提问作者Rover1337
相关产品推荐
相关产品推荐

