如果要公开发布程序,最常见的方式就是打包成exe程序了
打包的好处是使用者不需要考虑Python的运行环境,且也容易被接受
但不好的是一般打包出来的程序都比较大
且由于是依靠模块打包,有可能出现兼容性等问题。
打包
用到的工具
pyinstaller
工具安装命令:
python.exe -m pip install pyinstaller
安装好后使用命令行或者批处理命令运行以下代码即可
打包单个exe程序命令
pyinstaller -F xxx.py
打包GUI程序不需要控制台窗口的程序命令
pyinstaller -w -F xxx.py
- 打包带图标及版权声明的程序命令
pyinstaller --version-file=file_version.txt -i Logo.ico -y -F xxx.py
在代码里面尽量不要用import,能from.....import....就尽量用这个,因为如果是import的话,在打包的时候,会将整个包都打包到exe里面,没有意义的增大了工具的大小!
版权文件
文件名:file_version.txt
# UTF-8
#
# For more details about fixed file info 'ffi' see:
# http://msdn.microsoft.com/en-us/library/ms646997.aspx
VSVersionInfo(
ffi=FixedFileInfo(
# filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4)
# Set not needed items to zero 0.
filevers=(3, 9, 150, 1013),
prodvers=(3, 9, 150, 1013),
# Contains a bitmask that specifies the valid bits 'flags'r
mask=0x3f,
# Contains a bitmask that specifies the Boolean attributes of the file.
flags=0x0,
# The operating system for which this file was designed.
# 0x4 - NT and there is no need to change it.
OS=0x4,
# The general type of file.
# 0x1 - the file is an application.
fileType=0x1,
# The function of the file.
# 0x0 - the function is not defined for this fileType
subtype=0x0,
# Creation date and time stamp.
date=(0, 0)
),
kids=[
StringFileInfo(
[
StringTable(
u'000004b0',
[StringStruct(u'CompanyName', u'HackRicken'),
StringStruct(u'FileDescription', u'KK做的小软件'),
StringStruct(u'FileVersion', u'0.1.0'),
StringStruct(u'InternalName', u'批量下载器'),
StringStruct(u'LegalCopyright', u'Copyright © 2021 Ricken.'),
StringStruct(u'OriginalFilename', u'Download.exe'),
StringStruct(u'ProductName', u'批量下载器'),
StringStruct(u'ProductVersion', u'0.1.0')])
]),
VarFileInfo([VarStruct(u'Translation', [0, 1200])])
]
)
pyinstaller相关参数
符号 | 说明 |
---|---|
-F, –onefile | 打包一个单个文件,如果你的代码都写在一个.py文件的话,可以用这个,如果是多个.py文件就别用 |
-D, –onedir | 打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码,我个人比较推荐这样,代码易于维护 |
-K, –tk | 在部署时包含 TCL/TK |
-a, –ascii | 不包含编码.在支持Unicode的python版本上默认包含所有的编码. |
-d, –debug | 产生debug版本的可执行文件 |
-w,–windowed,–noconsole | 使用Windows子系统执行.当程序启动的时候不会打开命令行(只对Windows有效) |
-c,–nowindowed,–console | 使用控制台子系统执行(默认)(只对Windows有效)pyinstaller -c xxxx.pypyinstaller xxxx.py --console |
-s,–strip | 可执行文件和共享库将run through strip.注意Cygwin的strip往往使普通的win32 Dll无法使用. |
-X, –upx | 如果有UPX安装(执行Configure.py时检测),会压缩执行文件(Windows系统中的DLL也会)(参见note) |
-o DIR, –out=DIR | 指定spec文件的生成目录,如果没有指定,而且当前目录是PyInstaller的根目录,会自动创建一个用于输出(spec和生成的可执行文件)的目录.如果没有指定,而当前目录不是PyInstaller的根目录,则会输出到当前的目录下. |
-p DIR, –path=DIR | 设置导入路径(和使用PYTHONPATH效果相似).可以用路径分割符(Windows使用分号,Linux使用冒号)分割,指定多个目录.也可以使用多个-p参数来设置多个导入路径,让pyinstaller自己去找程序需要的资源 |
–icon=<FILE.ICO> | 将file.ico添加为可执行文件的资源(只对Windows系统有效),改变程序的图标 pyinstaller -i ico路径 xxxxx.py\ |
–icon=<FILE.EXE,N> | 将file.exe的第n个图标添加为可执行文件的资源(只对Windows系统有效) |
-v FILE, –version=FILE | 将verfile作为可执行文件的版本资源(只对Windows系统有效) |
-n NAME, –name=NAME | 可选的项目(产生的spec的)名字.如果省略,第一个脚本的主文件名将作为spec的名字 |
1 条评论
你的文章让我心情愉悦,真是太棒了!http://www.nyjingqiao.com