使用cx_Freeze打包Python至exe的版本兼容与配置问题咨询
cx_Freeze打包Python程序问题解答
1. 可兼容打包为exe的Python、numpy、pandas版本组合
亲测稳定的版本组合有这些:
- Python 3.8.10 + numpy 1.21.6 + pandas 1.3.5 + cx_Freeze 6.14
- Python 3.9.13 + numpy 1.23.5 + pandas 1.4.4 + cx_Freeze 6.15
- Python 3.7.16 + numpy 1.19.5 + pandas 1.1.5 + cx_Freeze 6.10
注意点:
- 别用Python 3.10+搭配numpy 1.24+或pandas 2.0+,这类新版本依赖内部结构变化大,cx_Freeze容易漏打包关键模块
- 安装时直接用pip指定版本,比如:
pip install numpy==1.21.6 pandas==1.3.5 cx_Freeze==6.14(Python版本提前装好对应版本) - 碰到DLL加载错误,先检查有没有安装对应版本的Visual C++ Redistributable(Python3.7-3.9对应2019版)
2. cx_Freeze中includes与packages的区别及设置方法
- includes:用来指定单个模块名。当cx_Freeze自动扫描依赖时,一些深层嵌套的小模块(比如numpy内部的方法模块)可能没被检测到,这时候手动添加即可。示例:
options = { "build_exe": { "includes": ["numpy.core._methods", "pandas._libs.tslibs.timedeltas"] } } - packages:用来指定整个包。如果你的程序依赖某个完整的第三方库(比如pandas、操作SAP的win32com)但没被自动检测到,就把包名填在这里,cx_Freeze会打包这个包下的所有子模块。示例:
options = { "build_exe": { "packages": ["pandas", "win32com.client"] } }
设置逻辑:先尝试默认打包,要是exe运行时报找不到模块,看是单个模块缺失还是整个包缺失,对应加到includes或packages中。
3. 针对触发SAP GUI取数+生成PDF程序的excludes配置
核心原则是排除完全用不上的包和模块,既能减小exe体积,还能避免依赖冲突:
- 排除没用的GUI库:如果程序没用到tkinter、PyQt这些,添加
"tkinter", "PyQt5", "PySide2" - 排除测试类模块:
"numpy.testing", "pandas.tests", "unittest" - 排除系统工具类冗余库:
"setuptools", "pkg_resources", "distutils" - 排除未使用的数据处理库:没用到matplotlib、scipy的话,添加
"matplotlib", "scipy" - 示例配置:
options = { "build_exe": { "excludes": ["tkinter", "numpy.testing", "pandas.tests", "setuptools", "matplotlib"] } }
提醒:不要随意添加excludes,先确认程序确实用不上这些模块,否则会导致运行报错。
内容的提问来源于stack exchange,提问作者Chosshh
相关产品推荐
相关产品推荐

