使用Cython编译Python代码后,PyInstaller打包出现依赖缺失问题
解决PyInstaller打包Cython编译模块时缺失依赖的问题
问题原因
PyInstaller的代码分析阶段仅能解析Python源码文件,无法读取Cython编译后的.so(或Windows平台的.pyd)二进制模块中的导入语句,导致这类模块依赖的第三方库(比如tomllib)不会被自动打包进可执行文件。
解决方案
1. 修改PyInstaller spec文件添加隐式依赖
打开你的main.spec文件,找到Analysis配置段,在hiddenimports列表中加入缺失的依赖模块:
a = Analysis( ['main.py'], pathex=[], binaries=[], datas=[], hiddenimports=['tomllib'], # 在此添加需要打包的依赖 hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], noarchive=False, )
之后通过spec文件重新打包:
pyinstaller main.spec
2. 主入口文件手动导入依赖
在main.py开头显式导入缺失的模块(即使代码中没有直接使用),让PyInstaller的分析器能检测到并打包:
import sys import tomllib # 手动添加此行导入 from PySide6.QtWidgets import QApplication from main_window import MainWindow if __name__ == '__main__': app = QApplication(sys.argv) mainWin = MainWindow() mainWin.show() sys.exit(app.exec_())
完成修改后重新执行打包命令即可。
3. 打包时通过命令行参数指定隐式依赖
如果不想修改源码或spec文件,可直接在打包命令中用--hidden-import参数指定缺失模块:
pyinstaller --hidden-import tomllib main.py
内容的提问来源于stack exchange,提问作者sebwr
相关产品推荐
相关产品推荐

