【python】之pyinstaller模块,python程序打包成一个可执行exe 文件(超详细)!
lina_999 2024-08-22 17:35:02 阅读 86
在开发Python应用程序时,将代码打包成可执行文件(.exe)是一个常见的需求。主要是方便接收者的使用,在没有python环境下也能正常打开的可执行文件。
Pylnstaller是一个在Windows、GNU/Linux、macos等平台下将Python程序冻结(打包)为独立可执行文件的工具,用于在未安装Python的平台上执行Python编写的应用程序
相比类似工具,它的主要优点是Pylnstaller与Python3.7-3.10一起工作,由于透明压缩,它构建了更小的可执行文件,它是完全多平台的,并使用操作系统支持加载动态库,从而确保完全兼容
PyInstaller会分析Python程序,并将程序打包成一个完整的可执行文件,包括所有依赖项。此外,Pylnstaller可以自动检测Python依赖库,并将其打包到可执行文件中
Pylnstaller的原理是将Python程序转换为C语言代码,并将C语言代码编译成可执行文件。具体来说,Pylnstaller会将Python程序分析为一个抽象语法树(AST),然后将AST转换为C语言代码。
1.更新pip指定版本、指定镜像源
python.exe -m pip install --upgrade pip==24.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
<code>python.exe -m pip install --upgrade pip==24.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
国内镜像源:
备注:pip install时出现WARNING: Ignoring invalid distribution
2.windows安装Pylnstaller库
在开始之前,我们需要安装打包的工具,我们将使用“pyinstaller”来打包Python文件成可执行文
win+r,输入cmd 进入命令行终端
<code>#安装命令
pip install pyinstaller
#安装太慢的话,可切换源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller #从清华源安装
等待安装完成即可!
2.1.pyinstaller 执行文件位置
D:\Program Files\pyhton3.11.4\Scripts
2.2环境变量配置
path 里添加 script路径\
2.3测试能否使用
3.pyinstaller 常用打包参数
pyinstaller --help #查看支持哪些参数
常用的参数:有的看可能看到用的是非错写版参数,也是正常的。
4.打包命令
windows和linux使用的命令都是一样的,这里为了方便平时使用,直接复制 粘贴使用,就分开写了。
windows系统打包命令:
<code># 如果你的Python程序是一个GUI应用程序,可以使用如下命令将其打包为GUI应用程序:
# 其中,--windowed参数表示生成无控制台窗口应用程序,--icon参数表示定义程序图标。
# -F 生成单个可执行文件, -w 不显示doc 小黑框
Pyinstaller -F -w 你的脚本.py -i 你的图标.ico (pyinstaller 首字母大小写都可以)
linux系统打包命令:
pyinstaller 你的脚本.py
# 默认情况下,PyInstaller生成的可执行文件包含多个文件。
# 如果需要将所有文件打包成一个单独的可执行文件,可以使用如下命令:
# --onefile 和 -F 是一样的
pyinstaller --onefile 你的脚本.py
pyinstaller -F 你的脚本.py
#如果你的Python程序是一个控制台应用程序,可以使用如下命令将其打包为控制台应用程序
pyinstaller --console 你的脚本.py # -c --console
设置环境变量
如果你的Python程序需要使用环境变量,可以通过设置PyInstaller的环境变量来实现。例如,如果你的Python程序需要使用MY_VAR环境变量,可以使用如下命令:
pyinstaller --env MY_VAR=value yourscript.py
准备python文件
在打包之前,确保你的python文件可以独立运行,并不依赖于动态加载的模块或其他外部源。如果你的文件有依赖项,确保他们已经正确的安装并能够在打包后被访问。
打包python文件
打开命令终端,并控制前往到你包含python文件(key_logger.py)的目录(也可以打开文件所在地,cmd)
单个python程序的转换
<code>Pyinstaller -F -w xxxx.py
切换到要转换的python文件路径,输入上述指令。
(1)-F: 只生成一个单个文件(只有一个 exe 文件)
(2)-w: 就是exe运行的时候不弹出那个命令行(黑窗口)
(3)xxx.py: 就是需要转换的python文件
接收到以下信息,即代表成功
执行打包命令回车运行
1.这将使用pyinstaller库将python文件打包成一个独立的可执行文件。
2. 打包过程需要些时间,等待完成。
打包完成,会在当前目录看到一个dist的文件夹
3.如果需要转换的python程序用到的外部库太多,程序比较大的情况下,可能会出现如下错误信息:
解决方法如下:
在执行完成后虽然报错,但是与xxx.py文件同级目录下会生成一个xxx.spec文件,打开这个文件,xxx.py第一行是字符编码,在代码的第二三行加入下面两句代码。
然后执行下面代码(千万不要再去执行原来的打包命令)
<code>pyinstaller -F -w xxxx.py
完成后双击运行该文件就可以啦。
运行可执行文件
进入dist 文件夹,找到生成的可执行文件,名字为key_logger.exe将可执行文件复制到你想要运行它的计算机上。双击可执行文件,你的python程序将开始执行。
注意事项:
设置环境变量
如果你的Python程序需要使用环境变量,可以通过设置PyInstaller的环境变量来实现。例如,如果你的Python程序需要使用MY_VAR环境变量,可以使用如下命令:
pyinstaller --env MY_VAR=value yourscript.py
关于依赖项和资源(第三方库或者模块,使用到的图片,配置文件)依赖项管理:如果你的Python程序依赖于外部库或模块,你需要确保这些依赖项在打包后可以正确访问。可以通过在打包命令中使用--hidden-import参数来指定需要包含的额外模块。
数据文件和资源:如果你的程序需要访问数据文件或其他资源文件,例如配置文件、图像等,确保这些文件与可执行文件一起打包。你可以使用--add-data参数来指定包含这些文件,如:
pyinstaller --onefile --add-data "data_files;data_files" your_script.py
打包多个文件
如果你的应用程序由多个Python文件组成,你可以通过将所有文件作为参数传递给pyinstaller
命令来打包它们
pyinstaller --onefile file1.py file2.py
这将打包所有指定的文件,并生成一个单独的可执行文件
实际打包会出现各种问题!
成功打包成可执行文件的时候。一打开这个文件,发现成了“不可执行文件”,路径错误问题,第三方库没有打包过去,环境也没有一起打包过去......
那怎么办啊,语法又记不住,那就用spec文件。
spec文件
spec文件是PyInstaller工具生成的一个配置文件,用于定义和配置打包过程中的各种选项和参数。它是一个纯文本文件,通常与要打包的Python脚本文件位于同一目录中,并以.spec作为文件扩展名。
spec文件包含了一些重要的信息,例如要打包的脚本文件、依赖项、数据文件、资源文件等。通过编辑spec文件,你可以自定义打包过程的行为和结果,以满足特定的需求。
创建spec文件
使用PyInstaller进行打包时,可以通过两种方式生成spec文件:
1.自动创建
在命令行终端中执行以下命令,PyInstaller将自动为指定的Python脚本文件生成一个默认的spec文件:
pyinstaller your_script.py
2.手动创建
也可以手动创建一个spec文件,并在其中指定需要打包的文件、依赖项和其他选项。创建一个新的文本文件,并使用以下基本结构
# your_script.spec
# 导入所需的模块
import sys
from PyInstaller.utils import collect_data_files
# 定义spec文件配置
block_cipher = None
a = Analysis(['your_script.py'], # 替换成你要打包的Python脚本文件
pathex=[],
binaries=[],
datas=collect_data_files('your_package'), # 替换成你要包含的数据文件路径
hiddenimports=[],
hookspath=[],
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,
a.binaries,
a.zipfiles,
a.datas,
[],
name='your_script', # 替换成你的可执行文件名code>
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True)
修改spec文件内容
使用文本编辑器打开.spec文件(your_script_name.spec),并根据需要进行修改。你可以自定义输出文件的名称、要包含的附加文件等选项。
1.添加第三方库:在.spec文件中,使用--add-data选项添加第三方库的文件。
如果第三方库包含非二进制文件(例如Python脚本、配置文件),可以使用--add-data选项来指定库文件相对于脚本文件的路径
datas=[('path/to/library/files/*', 'library/files')]
如果第三方库包含二进制文件(例如DLL文件、共享库),可以使用--add-binary
选项来包含这些文件。指定库文件相对于脚本文件的路径。
binaries=[('path/to/library/binary', '.')]
2. 添加图片路径:在.spec文件中,可以使用--add-data
选项添加图片路径,以确保图片文件被正确地打包进可执行文件。
datas=[('path/to/image/file.jpg', '.')]
将path/to/image/file.jpg
替换为实际的图片路径,并根据需要调整目标文件夹。
打包文件
编辑好了spec文件,你可以使用以下命令来执行打包过程:
pyinstaller your_script.spec
然后就会根据spec文件中的配置来进行打包文件,生成可执行文件 。
这是我打包一个按钮小程序时用到的spec文件:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
import sys
sys.path.append('d:/python_env/spider2_env/lib/site-packages')
import tkinter as tk
from tkinter import messagebox,ttk
from PIL import ImageTk, Image
import os
import random
a = Analysis(
['anniu.py'],
pathex=['D:/exe/py1'],
binaries=[],
datas=[('D:\\exe\\py1\\imgs\\a.jpg', 'imgs'), ('D:\\exe\\py1\\imgs\\c.jpg', 'imgs')],
hiddenimports=['PIL', 'tkinter', 'random', 'PIL.ImageTk'],
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,
a.binaries,
a.zipfiles,
a.datas,
[],
name='anniu',code>
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。