PyInstaller4.2打包报错ModuleNotFoundError: No module named 'algosec'求助
解决方案
根因说明
之前的尝试未生效核心有两个问题:
sys.path.append(./../algosec)使用了相对路径,打包后程序运行时的工作目录和开发环境不一致,相对路径直接失效- 仅添加
--hidden-import algosec参数但未告知PyInstaller本地algosec模块的存放路径,PyInstaller默认仅检索已安装的site-packages目录,找不到项目子目录下的本地模块
分步操作
- 修正运行时路径逻辑
在项目入口文件algobot_packer/algobot.py的最开头(所有其他导入语句之前)添加以下代码,兼容开发、打包后两种场景的路径识别:
import os import sys # 统一获取项目根目录路径 if getattr(sys, 'frozen', False): # 打包后运行场景 BASE_DIR = os.path.dirname(sys.executable) else: # 开发环境运行场景 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 将项目根目录加入Python搜索路径 sys.path.insert(0, BASE_DIR)
- 调整PyInstaller打包参数
在项目根目录(包含algobot、algosec、algobot-packer的顶层目录)执行打包命令,新增--paths参数指定项目根目录,同时补全algosec子模块的隐式导入声明:
# 先清空历史打包缓存 rm -rf build dist *.spec # 执行打包(类Unix系统) pyinstaller --onefile \ --paths ./ \ --hidden-import algosec \ --hidden-import algosec.models \ --add-data "./algosec:./algosec" \ algobot_packer/algobot.py # Windows系统打包请把add-data参数的冒号换成分号: # --add-data "./algosec;./algosec"
- 验证虚拟环境一致性
确保执行打包命令时使用的是Pipfile对应的虚拟环境内的PyInstaller,不要调用全局安装的PyInstaller,避免虚拟环境内登记的algosec依赖无法被识别。
如果之前曾打包成功后续反复失败,几乎都是PyInstaller历史缓存未清理导致,每次打包前必须删除build、dist文件夹和后缀为.spec的配置文件,再执行打包命令即可。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

