py文件打包成exe可执行文件

本文详细介绍使用 PyInstaller 工具将 Python 项目打包成独立的 exe 文件的过程,包括安装命令、基本打包命令、多文件打包、依赖处理及常见问题解决方法。

pyinstaller打包工具

官网:https://pypi.org/project/PyInstaller/

一、安装命令:pip3 install pyinstaller

二、打包命令(首先打开cmd命令窗口):

1.进入项目目录下,否则打包后的文件要在以c:/user/Owner下面

C:\Users\Owner> cd E:\pythonworkspaces\DealTXT

C:\Users\Owner> E:

E:\pythonworkspaces\DealTXT> pyinstaller  –clean –win-private-assemblies -Fw WinMain.py -p FileUtil.py –hidden-import FileUtil   #注意此方法在其它电脑会报找不到动态链接库

E:\pythonworkspaces\DealTXT> pyinstaller  –clean –win-private-assemblies -Dw WinMain.py -p FileUtil.py –hidden-import FileUtil

E:\pythonworkspaces\DealTXT> pyinstaller -Fw WinMain.py -p FileUtil.py –hidden-import FileUtil   #注意此方法在其它电脑会报找不到动态链接库

E:\pythonworkspaces\DealTXT> pyinstaller -Dw WinMain.py -p FileUtil.py –hidden-import FileUtil

三、多文件打包

命令格式如下,下命令为一条命令,为方便显示做了分行处理:

pyinstaller [主文件] -p [其他文件1] -p [其他文件2]

–hidden-import [自建模块1]

–hidden-import [自建模块2]

# 以上为一整条命令

例如:

pyinstaller main.py -p mysql.py -p other.py –hidden-import mysql –hidden-import other

四、用到其它依赖时,用上面的方法打包比较麻烦,可以采用spec文件方法

1、整体流程

pyi-makespec WinMain.py     # 先生成spec文件

pyinstaller WinMain.spec    # 再生成exe文件

2、参数说明

-F :打包成一个exe文件(在dist文件夹下)

pyi-makespec -Fw WinMain.py

pyinstaller WinMain.spec

-D :生成一个包含exe的文件夹

pyi-makespec -Dw WinMain.py

pyinstaller WinMain.spec

需要打包数个文件时,编辑spec文件

用文本编辑器打开spec文件,修改文件中的参数 datas=[]

例如要打包 global_popu.tif 到exe中时

pec文件中的参数修改为datas=[('global_popu.tif', '.')]

然后将spec文件编译成exe,两点注意:

将数据文件和xxx.py文件放在同一目录

对xxx.py程序读取数据的部分需要修改,修改方法如下

a = Analysis(['trip_popu.py'],

             pathex=['E:\\GitHub\\Zone\\Zone'],

             binaries=[],

             datas=[('global_popu.tif', '.')],

             hiddenimports=[],

             hookspath=[],

             runtime_hooks=[],

             excludes=[],

             win_no_prefer_redirects=False,

             win_private_assemblies=False,

             cipher=block_cipher,

             noarchive=False)

复制代码# 对xxx.py的修改

# 添加自定义的函数

def resource_path(relative_path):

    base_path = getattr(

        sys, '_MEIPASS', os.path.dirname(

            os.path.abspath(__file__)))

    return os.path.join(base_path, relative_path)

#global_popu_Dic = resource_path("global_popu.tif")  # 打包时使用

global_popu_Dic = "../data/global_popu.tif"            # 调试时使用

复制代码如果要打包两个或者多个数据文件,则对spec中的datas 修改参考下例:

datas=[('china_light_2016.tif', '.'),('china_population_2016.tif', '.')]

多个PY文件

整体操作与上述类似,关键在于修改spec中的参数

例如:code文件夹下的trip_popu.py用到了zone_func文件夹目录下的func.py文件,

在spec文件中的Analysis的第一个参数中加上func.py文件的绝对路径,然后生成exe即可

a = Analysis(['trip_popu.py','E:\\GitHub\\Zone\\Zone\\zone_func\\func.py'],

             pathex=['E:\\GitHub\\Zone\\Zone'],

             binaries=[],

             datas=[('global_popu.tif', '.')],

             hiddenimports=[],

             hookspath=[],

             runtime_hooks=[],

             excludes=[],

             win_no_prefer_redirects=False,

             win_private_assemblies=False,

             cipher=block_cipher,

             noarchive=False)

复制代码多进程打包

编写的程序中包含多进程处理时,正常打包运行exe后,电脑会卡死

所以在打包前,需先要对xxx.py文件进行修改,修改内容为:

import multiprocessing

if __name__ == "__main__":

    multiprocessing.freeze_support()    # 这一句一定要放在if __name__ == "__main__":下面

复制代码修改后,正常打包即可

问题记录

程序有使用到shapely库,打包时会提示缺少geos.dll

将提示的shapely库的路径下的geos_c.dll复制一份重命名为geos.dll,重新打包即可

程序有使用到geopandas库,打包时运行后提示

File "site-packages\geopandas\datasets\__init__.py", line 7, in <module>

StopIteration

[6764] Failed to execute script application

复制代码找到geopandas库文件下的__init__.py,将import geopandas.datasets这句注释掉

程序有使用到sklearn库时,打包运行时提示缺少一些模块,如sklearn.utils._cython_blas

修改spec文件中的hiddenimports参数后,重新打包,修改如下

a = Analysis(['mainarea_buffer.py','E:\\GitHub\\Zone\\Zone\\zone_func\\func.py'],

             pathex=['E:\\GitHub\\Zone\\Zone'],

             binaries=[],

             datas=[('global_popu.tif', '.')],

             hiddenimports=['sklearn.utils._cython_blas','cython', 'sklearn', 'sklearn.ensemble','sklearn.neighbors.typedefs','sklearn.neighbors.quad_tree','sklearn.tree._utils','scipy._lib.messagestream'],

             hookspath=[],

             runtime_hooks=[],

             excludes=[],

             win_no_prefer_redirects=False,

             win_private_assemblies=False,

             cipher=block_cipher,

             noarchive=False)

五、命令语法:pyinstaller -F 文件名(带后缀py)

#常用参数说明:

#–icon=图标路径

#-F 打包成一个exe文件

#-w 使用窗口,无控制台

#-c 使用控制台,无窗口

#-D 创建一个目录,里面包含exe以及其他一些依赖性文件

#pyinstaller -h 来查看参数

#将cmd的目录切换至(命令:cd 文件路径(注意空格))需要打包的py文件目录下:

#有命令窗口弹出

pyinstaller -F WinMain.py

#无命令窗口弹出

pyinstaller -F -w WinMain.py

#或者

pyinstaller -F WinMain.py  –noconsole

打包好的exe文件,在同目录的 dist 文件中,如果有依赖文件,就可以放到dist文件夹下即可

将 `.py` 文件打包 `.exe` 可执行文件,最常用且简单的方法是使用 **PyInstaller**。它能将 Python 脚本及其依赖库、解释器一起打包一个独立的 `.exe` 文件,无需目标电脑安装 Python 即可运行。 --- ### ✅ 使用 `PyInstaller` 打包 Python 程序为 `.exe` 的完整流程 #### 🔧 第一步:安装 PyInstaller 打开命令行(终端),运行: ```bash pip install pyinstaller ``` > ✅ 支持 Windows、macOS、Linux > ⚠️ 推荐在虚拟环境或干净环境中安装 --- #### 📁 第二步:准备你的 Python 脚本 例如你有一个脚本叫: ```python # hello.py print("Hello, 我是一个Python程序!") input("按回车键退出...") ``` 保存为 `hello.py`,放在某个目录下,比如 `C:\myapp\hello.py` --- #### 📦 第三步:使用 PyInstaller 打包 进入脚本所在目录: ```bash cd C:\myapp ``` 然后运行打包命令: ```bash pyinstaller hello.py ``` --- ### 🎯 打包方式选择 | 命令 | 说明 | |------|------| | `pyinstaller hello.py` | 默认打包文件夹(含多个文件) | | `pyinstaller --onefile hello.py` | 打包单个 `.exe` 文件(推荐) | | `pyinstaller --windowed --onefile gui_app.py` | GUI程序不显示黑框(如 tkinter) | | `pyinstaller --icon=app.ico --onefile hello.py` | 添加自定义图标 | --- ### 🎨 常用参数详解 | 参数 | 作用 | |------|------| | `--onefile` | 所有内容打包进一个 `.exe` 文件 | | `--windowed` | 不弹出控制台窗口(适用于 GUI 程序,如 tkinter、PyQt) | | `--icon=xxx.ico` | 设置 `.exe` 图标(必须是 `.ico` 格式) | | `--name=myapp` | 自定义生exe 名称 | | `--clean` | 清理缓存,避免异常 | 📌 示例(推荐用于 GUI 程序): ```bash pyinstaller --onefile --windowed --icon=app.ico --name=关机助手 shutdown_app.py ``` 这会生: - `dist/关机助手.exe` → 可直接双击运行! --- ### 🗂️ 输出目录结构 打包后,你会看到以下文件夹: - `dist/` → 最终的 `.exe` 文件在这里 ✅ - `build/` → 临时构建文件(可删除) - `hello.spec` → 打包配置文件(可编辑高级选项) - `__pycache__/`, `*.pyc` 等 → 中间文件 > 💡 最终只需发布 `dist` 目录下的 `.exe` 文件即可! --- ### 🖼️ 如何制作 `.ico` 图标? 1. 在线工具转换:[https://www.favicon.cc/](https://www.favicon.cc/) 或 [https://convertio.co/zh/png-ico/](https://convertio.co/zh/png-ico/) 2. 准备一张图片(建议 256x256 PNG) 3. 转换为 `app.ico` 4. 放在与 `.py` 同一目录下 --- ### ⚠️ 常见问题及解决方法 | 问题 | 解决方案 | |------|----------| | 打包exe 运行闪退 | 加上 `input("按回车退出")` 或用日志排查错误 | | 杀毒软件误报 | 属正常现象(因打包机制类似“加壳”),添加信任即可 | | 缺少模块(ModuleNotFoundError) | 手动添加 `--hidden-import=模块名` | | 文件太大(几十MB) | 正常!因为包含了整个 Python 解释器和库 | | 黑窗口一直存在 | GUI 程序记得加 `--windowed` 参数 | --- ### 🧪 测试你的 .exe 双击运行 `.exe`,测试功能是否正常。 如果出错,可以右键 → “以管理员身份运行”,或通过命令行启动查看报错信息: ```bash # 在 cmd 中运行,查看详细输出 dist/hello.exe ``` --- ### 📦 其他打包工具对比(了解即可) | 工具 | 特点 | |------|------| | **PyInstaller** | ✅ 最流行,支持多平台,一键打包 | | cx_Freeze | 跨平台,但配置较复杂 | | auto-py-to-exe | 基于 PyInstaller 的图形化界面(适合新手) | | Nuitka | 将 Python 编译为 C++,性能更高但复杂 | 📌 推荐新手使用:**PyInstaller** --- ### ✅ 总结:四步完打包 1. `pip install pyinstaller` 2. 写好 `.py` 文件(如 `app.py`) 3. 运行命令: ```bash pyinstaller --onefile --windowed --icon=app.ico app.py ``` 4. 发布 `dist/app.exe` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值