(结尾附上使用.spec打包时,增加--key
命令进行加密)
最近写了个功能GUI,需要对源码打包生成exe可执行文件,结果遇到了几个坑,耗费了些时间才解决,现在进行个总结,希望网友们能更加快速入门pyinstall。这个总结并不全面,因为已经足够我使用了,按照步骤可快读打包完成。仅供大家参考!
说明
本文偏向于多文件打包,单文件本身也难度不大,而且多文件的方法也适用于单文件。
pyinstaller 官方pyinstaller 官网 https://pypi.org/project/pyinstaller/
pyinstaller 官方文档 https://pyinstaller.readthedocs.io/
-F:仅仅生成一个文件,不暴露其他信息,启动较慢。
-D:(默认)生成一个文件夹,包含可执行文件和相关动态链接库和资源文件等,启动快。
-w:窗口模式打包,不显示控制台。
-c:跟图标路径,作为应用icon。
-n 指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字
以下每行代码代表一种打包方式,仅列举了常用的几种,test.py
文件为打包的python源码文件
pyinstaller -F -i ./test.ico --key 035634 test.py # 配置图标、防反编译打包
pyinstaller -F -i ./test.ico test.py # 配置图标
pyinstaller -F test.py # 默认打包方式
打包成一个exe文件还是一个文件夹(-F -D
问题)
-D
是默认的,打包成一个文件夹,文件夹中含有可执行文件和相关动态链接库和资源文件,优点是执行速度快,也就是打开软件的速度快。上面的说法对单文件和多文件都适用。
步骤 1. 整理文件目录:
(将.py文件放到项目根目录下,其他格式文件放到文件夹如file1里)
2. 安装库文件:|—file1
|—— ###.csv
|—— ###.jpg
|—file2
|—— ###.txt
|—test1.py
|—test2.py
|— …
pip install Pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple
pyi-makespec -D -w--key 23456 gui4.py
(需要任何命令,在这一个步骤中加入,如 --key 23456,加入后生成的spec文件将会自动配置相关命令内容,详情请查看.spec
文件。注意:无法在pyinstaller ###.spec
时候配置任何命令)
下面.spec
文件作为参考,下文有相关步骤解释。
# -*- mode: python ; coding: utf-8 -*-
block_cipher = pyi_crypto.PyiBlockCipher(key='570333')
SETUP_DIR = 'D:\Users\Desktop\GUI5'
a = Analysis(['gui4.py','GetFollowerData.py','GetLikesData.py','GetUserData.py','MyLog1.py','MyLog2.py'],
pathex=[SETUP_DIR],
binaries=[],
datas=[(SETUP_DIR + '\file','file'),(SETUP_DIR + '\user_files','user_files')],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
[],
exclude_binaries=True,
name='biliFM',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False,
disable_windowed_traceback=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon=SETUP_DIR + '\file\icon.ico' )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='biliFM')
5. 开始打包a. 可使用常量如
SETUP_DIR
设置一个工程文件路径,以简化后面的路径
b. 将所有.py
文件名添加到Analysis(['','',''])
c. 添加工程文件绝对路径到pathex['']
d. 将其他文件夹和文件夹名称添加到datas[(,),(,)]
,空文件夹无效,可添加占位文件,如空的txt文件
e. 通过consolo = True 或 False
设置控制台显示
f. 通过name=
设置exe文件的文件名
g. 通过icon=
设置exe文件图标(如果第二步没有适用-n命令,则.spec文件中没有这行代码,可通过手动添加,其他代码也同样如此)
h. (如果执行exe出现No Module named xxx
),在Hidden import
中添加
i. 将所有路径中的\
替换为\
运行.spec
文件,如pyinstaller test.spec
a. 克隆python-exe-unpacker中的
pyinstxtractor.py
文件到exe所在目录
b. 运行python pyinstxtractor.py ###.exe
(如果使用了--key
,且已经发挥作用,那么反编译会产生error,可起到一定的防止反编译效果)
尾
结尾还是想说一下,刚接触pyinstall时候,不知道使用spec打包怎么进行加密,就算使用了--key
命令,让然不起作用。后来才发现,需要在生成.spec
文件的时候加入命令,如pyi-makespec -D -w --key 23456 gui4.py
。加入的命令会在.spec
文件中有所体现,具体可亲自尝试探索!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)