如何用PyInstaller制作不含Python环境的可执行文件?
使用PyInstaller打包不含Python环境与依赖的可执行文件
如果目标系统已经装好了对应版本的Python和所有需要的依赖包,完全可以让PyInstaller只生成一个轻量的启动器,直接调用系统本地的Python来跑你的脚本,具体操作如下:
核心操作步骤
核心参数:
--no-bundle-python
这个参数是关键,它会让PyInstaller放弃打包Python解释器,转而使用目标机器上已安装的Python环境来执行脚本。排除所有依赖包
既然目标系统已经有了所有依赖,你可以通过命令行参数或者spec文件批量排除不需要打包的包:- 命令行直接排除:
比如你的脚本依赖numpy、requests,直接在打包命令里加上--exclude-module:
如果要排除所有第三方依赖和非必要标准库,也可以用pyinstaller --no-bundle-python --exclude-module=numpy --exclude-module=requests your_script.py--exclude-module=*(注意:如果脚本有自定义模块,别把它们排除了)。 - 通过spec文件精准控制:
先生成spec文件:
打开生成的pyinstaller your_script.pyyour_script.spec,找到excludes字段,把所有需要排除的依赖包加进去:
然后用spec文件重新打包:a = Analysis( ['your_script.py'], pathex=[], binaries=[], datas=[], hiddenimports=[], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=['numpy', 'pandas', 'requests'], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False, )pyinstaller your_script.spec
- 命令行直接排除:
注意事项
- 目标系统的Python版本必须和你打包时用的版本一致,不然容易出现语法或兼容性问题
- 确认目标系统的Python环境里已经装好了脚本所有依赖的包,且版本匹配
- 如果脚本用到了相对路径,打包后运行exe时要注意工作路径的问题,必要时可以在脚本里处理路径逻辑
内容的提问来源于stack exchange,提问作者Manoj Upadhye
相关产品推荐
相关产品推荐

