PyInstaller:把 Python 程序变成可执行文件的神器!

你是否曾经为分享自己编写的 Python 程序而苦恼?对方电脑上没有 Python 环境怎么办?依赖的库太多,安装太麻烦怎么办?不同操作系统兼容性问题又该如何解决?
别担心,今天就给大家介绍一个神器——PyInstaller,它能轻松将你的 Python 程序打包成独立的可执行文件,让分享和部署变得无比简单!

一、PyInstaller:让 Python 程序自由飞翔

PyInstaller 的作用简单来说,就是将 Python 代码及其依赖项打包成一个独立的可执行文件(例如 Windows 下的 .exe 文件),可以脱离 Python 环境运行。

这样一来,即使对方电脑上没有安装 Python 或相关的库,也能直接运行你的程序,再也不用担心环境配置的问题了!

PyInstaller 的优势:

  • 简单易用: 一条命令即可完成打包,操作简单,上手容易。

  • 跨平台支持: 支持 Windows、Linux 和 macOS 等主流操作系统。

  • 独立运行: 生成的可执行文件不依赖 Python 环境,可以独立运行。

  • 保护代码: 一定程度上可以保护你的源代码,防止直接被查看。

  • 减小体积: 可以通过一些技巧减小打包后的文件体积。

二、安装 PyInstaller:只需一步到位

安装 PyInstaller 非常简单,只需要使用 pip 命令即可:

pip install pyinstaller

这条命令会自动下载并安装 PyInstaller 及其依赖项。安装完成后,你就可以在命令行中使用 pyinstaller 命令了。

三、基础打包:一键生成可执行文件

PyInstaller 最常用的打包方式就是将 Python 程序打包成一个单独的可执行文件。假设你有一个名为 my_script.py 的 Python 文件,你可以使用以下命令进行打包:

pyinstaller --onefile my_script.py

代码注解:

  • pyinstaller:调用 PyInstaller 工具。

  • --onefile:指定将程序打包成一个单独的可执行文件。

  • my_script.py:你要打包的 Python 文件名。

执行完命令后,你会发现在当前目录下生成了两个文件夹:build 和 dist。dist 文件夹中存放的就是打包好的可执行文件,例如 my_script.exe(在 Windows 系统下)。

四、进阶打包技巧:定制你的专属程序

除了基础打包外,PyInstaller 还提供了一些进阶技巧,可以让你定制更符合需求的程序。

1. 添加图标和程序信息

如果你想让你的程序看起来更专业,可以给它添加自定义图标和程序信息。这需要使用到 .spec 文件。

首先,生成一个 .spec 文件:

pyinstaller my_script.py

这会在当前目录下生成一个名为 my_script.spec 的文件。然后,编辑这个文件,修改以下几项:

# ... 其他配置 ...

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='my_script', # 可执行程序名称
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False, # true 表示运行时显示控制台窗口
          disable_windowed_traceback=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None,
          icon='my_icon.ico', # 指定图标文件路径
          )

coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='my_script') # 生成的程序名称

# ... 其他配置 ...

代码注解:

  • name:指定生成的可执行文件的名称。

  • console:为 True,程序运行时会显示一个命令行窗口;为 False,则不会显示。

  • icon:指定程序的图标文件路径(例如 my_icon.ico)。

修改完 .spec 文件后,使用以下命令进行打包:

pyinstaller my_script.spec

2. 打包数据文件

如果你的程序需要使用到一些数据文件,例如图片、音频、文本文件等,你需要告诉 PyInstaller 将这些文件也打包进去。可以使用 --add-data 参数来指定要添加的数据文件。

例如,如果你的程序需要使用一个名为 data.txt 的文本文件,并且该文件位于 data 文件夹中,你可以使用以下命令进行打包:

pyinstaller --onefile my_script.py --add-data "data/data.txt;data"

代码注解:

  • --add-data:指定要添加的数据文件。

  • "data/data.txt;data":指定数据文件的路径和在打包后的程序中的相对路径,用分号 (:) 分隔。在linux 或者 mac os 下使用冒号(:)。这里表示将 data/data.txt 文件添加到打包后的程序的 data 文件夹中。

你也可以使用.spec文件进行数据文件的打包,只需要在.spec文件中修改datas项即可,例子如下:

a = Analysis(
    # ...
    datas=[('data/data.txt', 'data')],
    # ...
)

代码注解:

  • datas=[('data/data.txt', 'data')]: 一个元组列表,每个元组包含两个字符串。第一个字符串是你的电脑上的文件路径,第二个字符串是文件在打包后程序内部的相对路径。

五、实战案例:让理论落地

案例一:打包一个简单的 GUI 程序

假设你使用 Tkinter 编写了一个简单的 GUI 程序 gui_app.py:

import tkinter as tk

def greet():
    name = name_entry.get()
    greeting_label.config(text=f"Hello, {name}!")

window = tk.Tk()
window.title("My GUI App")

name_label = tk.Label(window, text="Enter your name:")
name_label.pack()

name_entry = tk.Entry(window)
name_entry.pack()

greet_button = tk.Button(window, text="Greet", command=greet)
greet_button.pack()

greeting_label = tk.Label(window, text="")
greeting_label.pack()

window.mainloop()

你可以使用以下命令将它打包成一个可执行文件:

pyinstaller --onefile --windowed gui_app.py

代码注解:

  • --windowed:指定生成一个窗口程序,运行时不会显示命令行窗口。

案例二:打包一个包含数据文件的命令行工具

假设你编写了一个处理文本文件的命令行工具 text_processor.py,它需要读取一个名为 config.json 的配置文件:

import json

def process_text(input_file, output_file, config_file):
    with open(config_file, 'r') as f:
        config = json.load(f)

    with open(input_file, 'r') as f:
        text = f.read()

    # 根据 config 中的配置处理文本...
    processed_text = text.upper()  # 示例:将文本转换为大写

    with open(output_file, 'w') as f:
        f.write(processed_text)

if __name__ == "__main__":
    config_file = "config.json"
    input_file = "input.txt"
    output_file = "output.txt"
    process_text(input_file, output_file, config_file)

其中config.json文件内容如下:

{
  "setting1": "value1",
  "setting2": "value2"
}

你可以使用以下命令将它和 config.json 一起打包:

pyinstaller --onefile text_processor.py --add-data "config.json;."

代码注解:

  • --add-data "config.json;.":将 config.json 文件添加到打包后的程序的根目录下。

六、结语

PyInstaller 是一个强大而易用的工具,可以帮助你轻松地将 Python 程序打包成可执行文件,解决程序分享和部署的难题。

希望这篇文章能帮助你掌握 PyInstaller 的使用方法,让你的 Python 程序更加便捷地与他人分享!快去试试吧!

全套Python学习资料分享:

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

图片

二、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

图片

三、python入门资料大全

图片

四、python进阶资料大全

图片

五、python爬虫专栏

图片

六、入门学习视频全套

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

图片

七、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

图片

八、python最新面试题

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

印象Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值