【Python】Python打包生成可执行程序
一、前言
有时候使用Python写的工具需要给其他人使用,但不同的电脑上面环境各不相同,安装Python还需要装对应的库,比较麻烦,打包成可执行文件是一个很好的解决方案。刚开始打包执行文件时采用的是py2exe,后来由于打包时包含库的问题处理麻烦换了pyinstaller,总体来说后者还是稍微好用一点。
二、使用py2exe打包生成可执行程序
1. py2exe模块安装
# 现在python2的安装可能麻烦点,需要找安装包 # https://sourceforge.net/projects/py2exe/files/py2exe/ pip install py2exe
2. 创建打包脚本
# 文件名 setup.py from distutils.core import setup import py2exe # 填写需要打包的代码的主入口文件 setup(console=["yourmain.py"])
3. 通过命令行执行打包命令
python setup.py py2exe
以上只是最简单的示例,通过py2exe打包可以选择包含的文件,设置可执行文件的图标,对于GUI程序可以选择使用windows模式,而不是控制台运行。下面是完整的打包脚本与详细的说明。
# 文件名 setup.py from distutils.core import setup import py2exe options = { "py2exe":{ #library.zip 文件是否压测 1压测 0不压缩, 不压缩zip会大一点 "compressed":0, # 打包优化等级 0不优化(pyc) 1(pyo), 2(pyo)额外优化 "optimize":0, # 文件打包到exe中, 1打包,包含Py解释器 2打包,不包括Py解释器, 3不打包 # 1,2 在64位系统上不支持 "bundle_files":3, # 打包排除的dll文件 "dll_excludes":[], #例如打PyQt的程序就需要排除MSVCPXX.dll # 包含的文件 "includes":[] } } setup( options=options, # 设置 description="软件描述", zipfile=None, #设置None将library.zip打入exe中,不填则不打入 #下面的参数console,windows,service不可同时使用 console=[ {"script": "yourmain.py", #脚本 "icon_resources": [(1, u"icon.ico")] } #设置图标 ], # 控制台 windows=["yourmain.py"], # 窗口程序 service=["yourservice"] #这个可以生成服务,但我没有用过。 )
三、使用pyinstaller打包生成可执行程序
1. 安装Pythoninstaller
pip install pyinstaller
2. 执行打包
pyinstaller -F yourmain.py
使用pyinstaller打包会比较简单,安装好后执行命令即可完成可执行程序打包。当然pyinstaller也提供了许多的参数来进行打包设置,下面列出了一些常用的指令。
参数 |
简写 |
描述 |
--help |
-h |
查看该模块的帮助信息 |
-onefile |
-F |
将全部代码打包仅生成一个可执行文件 |
--onedir |
-D |
将生成一个目录,包含多文件作为可执行程序 |
--windowed | -w | 打包的程序运行时不会显示命令行窗口 |
--console |
-c |
打包程序以命令行窗口运行 |
--out=DIR |
-o DIR | 指定spec文件的生成目录,默认生成在当前目录 |
--path=DIR |
-p DIR |
设置导入模块的路径 |
--name=NAME |
-n NAME |
设置可执行程序的名字 |
--icon=icon |
-i icon |
设置可执行程序的图标 |
这里需要特别注意使用pyinstaller -F yourmain.py 打包生成的独立exe运行的时候会在C盘Local/Temp生成一个临时目录,而且每次运行都会生成一个。这就是占用磁盘的隐藏祸首。
四、将代码生成pyd
有时候需要对部分代码进行隐藏或加快运行速度,就可以将py代码打成pyd文件进行使用。
1. 首先需要安装Cython库。
pip install Cython
2. 编写编译脚本
from distutils.core import setup from Cython.Build import cythonize setup( name = '脚本名', ext_modules = cythonize("脚本.py"), )
3. 执行编译
python setup.py build_ext --inplace
pyd的使用方式和py文件一致,只是无法看到里面的内容而已。在执行编译的时候如果出现“Unable to find vcvarsall.bat”错误时,就需要下载安装vcvarsall.bat。
五、后记
本篇主要是将Python代码打包的方式进行了简单的汇总记录,方便自己后续使用,也希望大家看后有所帮助。
欢迎微信搜索"游戏测试开发"关注一起沟通交流。