Python脚本文件打包成Windows可执行程序格式
前言
近些月来,笔者和几位同学在给实习公司开发一个工具,内容为利用C-5因子模型为加密货币排序(模型详见:Value Premium, Network Adoption, and Factor Pricing of Crypto Assets )。由于本学渣文科出身,写码水平实在有限,只好现学Python来做我们的项目(这里不是说Python垃圾,只是说上手容易,大佬轻喷)。而经过这几个月的爆肝,整体程序结构已经初具样貌。
然而,由于老板的要求,我们最终要交付的程序需要可以在Windows上直接运行,而我们知道,Python开发完后的所有文件,都是py格式的脚本文件如:xxx.py。而这样的文件想要在Windows电脑上运行,则需这台电脑安装了python环境,且在环境中配置了所有的程序所需的第三方库,这显然对于不懂技术的甲方来说属于不可承受之重了。
于是,为了甲方的方便着想,我们便需要将*.py文件打包成.exe的格式,而在使用谷歌搜索法学习后,本人找到了打包的方法,即使用pyinstaller
,这篇博客主要记录下整体的流程。
程序结构简介
整个程序结构其实很简单(毕竟业余写码水平),主要就是按照C5模型论文分了几个阶段:1. 拉取数据、2. 预处理数据、3. 因子计算、4. 模型拟合、5. 排名并输出结果。
然后为了程序结构清晰,我们将其分为多个文件夹,在其中定义不同的方法/函数来实现上述的步骤,最终程序由主入口文件访问。

图中红框内的为核心文件,其余的是调试时生成的无用文件。
而打包程序时,其实只需将程序文件主入口(我们使用main.py
)进行exe封装,其余的会被自动打包进文件。
pyinstaller安装
pyinstaller
的安装很简单,只需输入如下代码:
1 | pip install pyinstaller |
这里需要注意的是,我们必须在想要打包的程序相应的虚拟环境下运行上述代码,否则其默认会将Python全局环境打包,导致程序无法启动。
pyinstaller使用
pyinstaller的使用也很容易,只需输入:
1 | pyinstaller -F main.py |
其中,-F
参数表示将文件打包成一份文件,如果不加则默认输出一个文件夹,可以按需要使用。这里本人测试下来单文件打包所需空间较小,于是就用了单文件的方式。
而对于程序图标,我们也可以自定义,只需在目录下放一张.ico格式的图片,然后将代码修改为:
1 | pyinstaller -F -i xxx.ico main.py |
效果
当跑完上述代码后,程序目录便会出现dist
文件夹,我们便可以在其中找到main.exe
,将其拷贝到程序根目录便可以了。
直接运行效果:

Hidden-Import
有些时候,程序依赖运行的某些文件会被pyinstaller忽视,导致最终的成品文件无法运行,例如我们的加密货币分析项目中,用到了sklearn
包,而其中的sklearn.utils._typedefs
默认不会被导入,这就会让程序中途弹出,此时,便可以在pyinstaller中使用--hidden-import
参数,手动加入需要的依赖:
1 | pyinstaller -F main.py --hidden-import="sklearn.utils._typedefs" |
至于这里具体要导入哪些文件,则需根据你自己的程序报错日志来选取。