Pyinstaller打包后无法找到模块:Hug服务启动失败问题
问题分析与解决方案
问题根源
- PyInstaller单文件模式运行时,会将程序解压到临时目录,但仅存放编译后的
.pyc文件,不会保留.py源文件,所以你通过路径拼接得到的api.py必然不存在。 - 用
subprocess调用hug命令时,实际调用的是系统环境中的Python解释器,而非PyInstaller打包的嵌入式Python,导致无法识别打包后的模块结构。
修复方案
放弃通过子进程调用hug命令的方式,直接在代码中调用Hug的内置API启动服务,完全适配打包后的环境。
修改代码
- 更新
startserver.py:
import hug import mypkg.api # 直接导入api模块 def start(): print("inside startserver start()") # 用Hug内置API启动服务,无需依赖外部文件路径 hug.API(__name__).extend(mypkg.api) hug.run(server='wsgiref', port=8000) # 可按需调整服务类型和端口
__main__.py保持原有逻辑:
from mypkg.startserver import start if __name__ == "__main__": start()
打包参数调整
使用PyInstaller打包时,添加参数确保Hug相关依赖被正确打包:
pyinstaller --onefile --name mypkg_demo --hidden-import hug --hidden-import mypkg.api mypkg/__main__.py
验证
打包完成后运行生成的EXE,浏览器访问http://localhost:8000/ping,即可正常获取{"response": "pong"}响应。
内容的提问来源于stack exchange,提问作者Impostor Syndrome
相关产品推荐
相关产品推荐

