怎么把Python脚本打包成可执行程序?

简介: 【6月更文挑战第3天】最近根据用户提的需求用python做了一个小工具,但是在给客户使用的时候不能直接发送python文件,毕竟让客户去安装python环境,那就离了大谱了。所以这时候就需要把多个py文件带着运行环境打包成EXE可执行文件。

需求分析

最近根据用户提的需求用python做了一个小工具,但是在给客户使用的时候不能直接发送python文件,毕竟让客户去安装python环境,那就离了大谱了。所以这时候就需要把多个py文件带着运行环境打包成EXE可执行文件

技术实现

这里以window为例,Mac是同样的道理。

一、检测脚本是否正常

1、确保电脑上已经安装好 python,并且已经配置好了运行环境。

2、使用Windows键 + R打开运行窗口,然后输入cmd并按Enter键,或者在开始菜单中搜索“命令提示符”并打开。

3、使用cd命令切换到存储Python脚本的目录。例如,如果脚本在 C:\Users\xiaodou\Documents 下,你可以输入以下命令:

cd C:\Users\xiaodou\Documents

4、在命令提示符中,输入以下命令运行你的Python脚本,测试脚本是否能正常执行:

python main.py

二、打包单个文件

1、 安装 PyInstaller: 在命令行中运行以下命令安装 PyInstaller:

pip install pyinstaller

2、使用 PyInstaller 打包程序: 在命令行中,进入Python 文件的目录,然后运行以下命令:

pyinstaller --onefile main.py

这个命令将创建一个名为 dist 的目录,这里面会包含了一个独立的.exe可执行文件。main.py 中的所有依赖项将被打包到这个可执行文件中。

  • --onefile:它指定将所有程序文件和依赖项打包成一个单独的可执行文件。这意味着生成的可执行文件包含了你的主程序文件以及所有依赖的模块和库,使得你只需分发一个文件,而不是多个文件。

3、找到生成的可执行文件:dist 目录中找到生成的可执行文件。这个文件的名称通常与你的主程序文件(main.py)相同,例如,main.exe

image.png

4、 将可执行文件拷贝到目标计算机: 将生成的可执行文件拷贝到目标计算机上,然后在目标计算机上运行它。由于这是一个独立的可执行文件,不需要安装 Python 环境,可以在没有 Python 的情况下直接运行。

常见问题

一、如何去除运行时弹出的命令行窗口

这个程序在window系统上执行的时候,会有个命令行弹框,这时候如何把命令行弹框去掉呢?

1、使用--noconsole 选项(建议)

在使用PyInstaller打包时,你可以使用--noconsole选项,它会告诉PyInstaller在Windows上创建一个窗体应用程序而不是控制台应用程序。这样就不会显示命令行窗口。

pyinstaller --onefile --noconsole main.py

2、在脚本中隐藏窗口(只在Windows上有效)

如果你的程序是一个图形界面应用程序,你可以在你的main.py中加入代码来隐藏命令行窗口。这通常需要使用ctypes库,例如:

import ctypes

ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 0)

二、指定可执行文件的icon图标

如果我们修改程序的图标和显示图标,可以按照下面的步骤操作:

1、准备一个.ico格式的图标文件,放在py文件的同级目录下。

2、在运行 PyInstaller 命令时,可以通过 --icon 选项指定图标文件,这个图标将用于生成的可执行文件的显示图标和窗口图标。例如:

pyinstaller --onefile --noconsole --icon=xiaodou.ico main.py

注意事项:

  • 图标文件通常使用.ico格式。
  • 确保指定的图标文件是有效的,否则可能导致PyInstaller命令失败。
  • 一些窗体库(例如tkinter)可能需要特殊处理来设置程序窗口的图标。在这种情况下,你可能需要在程序代码中设置图标。
目录
相关文章
|
3天前
|
网络协议 Linux Python
Python脚本配置Centos静态ip地址
这是一个Python脚本,用于自动化配置CentOS系统的静态IP地址。脚本创建或修改文件,填写接口名(如ens33)、IP地址、子网掩码、网关和DNS。运行时需替换变量值并使用`sudo`以管理员权限执行。完成配置后,它会重启网络服务。注意,用户应根据实际网络环境调整参数。
Python脚本配置Centos静态ip地址
|
1天前
|
SQL API Python
`bandit`是一个Python静态代码分析工具,专注于查找常见的安全漏洞,如SQL注入、跨站脚本(XSS)等。
`bandit`是一个Python静态代码分析工具,专注于查找常见的安全漏洞,如SQL注入、跨站脚本(XSS)等。
19 8
|
1天前
|
网络协议 安全 Shell
`nmap`是一个开源的网络扫描工具,用于发现网络上的设备和服务。Python的`python-nmap`库允许我们在Python脚本中直接使用`nmap`的功能。
`nmap`是一个开源的网络扫描工具,用于发现网络上的设备和服务。Python的`python-nmap`库允许我们在Python脚本中直接使用`nmap`的功能。
17 7
|
2天前
|
网络协议 Python
Scapy一个强大的 Python 程序(一)
Scapy是Python的网络数据包操作工具,用于创建、分析和发送网络包。启动Scapy需以管理员权限运行`sudo scapy`。在交互式环境中,可构建自定义数据包,如设置IP包的`ttl`、`src`和`dst`。通过`/`叠加协议层,如IP和TCP。发送数据包示例:构造向`www.slashdot.org`的HTTP GET请求。Scapy还能用于嗅探、过滤和修改数据包,功能强大。
|
1天前
|
网络协议 安全 Python
Scapy一个强大的 Python 程序(二)
Scapy是Python的网络安全工具,可用于创建和修改网络包
|
4天前
|
数据采集 存储 监控
python 10个自动化脚本
【7月更文挑战第10天】
15 3
|
4天前
|
存储 算法 调度
惊呆了!Python高级数据结构堆与优先队列,竟然能这样优化你的程序性能!
【7月更文挑战第10天】Python的heapq模块实现了堆和优先队列,提供heappush和heappop等函数,支持O(log n)时间复杂度的操作。优先队列常用于任务调度和图算法,优化性能。例如,Dijkstra算法利用最小堆加速路径查找。堆通过列表存储,内存效率高。示例展示了添加、弹出和自定义优先级元素。使用堆优化程序,提升效率。
14 2
|
1天前
|
算法 Python
我们需要一个简单的Python脚本来作为示例。假设我们有一个名为`hello_world.py`的脚本,
我们需要一个简单的Python脚本来作为示例。假设我们有一个名为`hello_world.py`的脚本,
6 0
|
1天前
|
存储 开发者 网络架构
在Python中,`setuptools`是一个强大的工具,用于帮助开发者打包和分发他们的Python代码库。
在Python中,`setuptools`是一个强大的工具,用于帮助开发者打包和分发他们的Python代码库。
5 0
|
1月前
|
存储 区块链 Python
怎么把Python脚本打包成可执行程序?
最近根据用户提的需求用python做了一个小工具,但是在给客户使用的时候不能直接发送python文件,毕竟让客户去安装python环境,那就离了大谱了。所以这时候就需要把多个py文件带着运行环境打包成EXE可执行文件。
怎么把Python脚本打包成可执行程序?