PyInstaller將Python打包成windows可執(zhí)行的exe(細(xì)致版)
在開發(fā) Python 應(yīng)用程序時(shí),有時(shí)我們需要將腳本打包成獨(dú)立的可執(zhí)行文件(.exe),以便于在沒有安裝 Python 環(huán)境的計(jì)算機(jī)上運(yùn)行。本文將介紹如何使用 PyInstaller 工具將 Python 本打包成 Windows 可執(zhí)行文件。
1. 安裝 PyInstaller
首先,你需要安裝 PyInstaller??梢酝ㄟ^ pip 來安裝:
pip install pyinstaller
2. 準(zhǔn)備你的 Python 腳本
假設(shè)你有一個(gè)名為 myapp.py 的 Python 腳本,內(nèi)容如下:
import tkinter as tk
def on_button_click():
label.config(text="Hello, World!")
root = tk.Tk()
root.title("My App")
label = tk.Label(root, text="Welcome to My App")
label.pack(pady=20)
button = tk.Button(root, text="Click Me", command=on_button_click)
button.pack(pady=10)
root.mainloop()這個(gè)腳本使用 tkinter 庫創(chuàng)建了一個(gè)簡(jiǎn)單的 GUI 應(yīng)用程序。
3. 使用 PyInstaller 打包腳本
3.1 基本打包
打開命令行或終端,導(dǎo)航到包含 myapp.py 的目錄,然后運(yùn)行以下命令:
pyinstaller myapp.py
這將生成一個(gè) dist 目錄,其中包含可執(zhí)行文件和其他必要的文件。

3.2 單文件模式
為了生成一個(gè)單獨(dú)的可執(zhí)行文件,可以使用 --onefile 參數(shù):
pyinstaller --onefile myapp.py

3.3 設(shè)置圖標(biāo)
如果你希望給生成的可執(zhí)行文件設(shè)置圖標(biāo),可以使用 --icon 參數(shù)。假設(shè)你有一個(gè)名為 myicon.ico 的圖標(biāo)文件:
pyinstaller --onefile --icon=myicon.ico myapp.py
3.4 隱藏控制臺(tái)窗口
對(duì)于 GUI 應(yīng)用程序,你可能不希望顯示控制臺(tái)窗口??梢允褂?--noconsole 參數(shù)來隱藏控制臺(tái)窗口:
pyinstaller --onefile --noconsole --icon=myicon.ico myapp.py
3.5 添加數(shù)據(jù)文件
如果你的應(yīng)用程序需要額外的數(shù)據(jù)文件,比如配置文件或資源文件,可以使用 --add-data 參數(shù)。例如,假設(shè)你有一個(gè)名為 config.ini 的配置文件:
pyinstaller --onefile --noconsole --icon=myicon.ico --add-data "config.ini;." myapp.py
這里的 config.ini;. 表示將 config.ini 文件復(fù)制到可執(zhí)行文件所在目錄的根目錄下。
4. 使用 .spec 文件進(jìn)行高級(jí)配置
對(duì)于更復(fù)雜的項(xiàng)目,你可能需要更多的控制權(quán)。PyInstaller 提供了 .spec 文件來配置構(gòu)建過程。
4.1 生成 .spec 文件
首次運(yùn)行 PyInstaller 時(shí),它會(huì)自動(dòng)生成一個(gè) .spec 文件。例如:
pyinstaller myapp.py
這將在當(dāng)前目錄下生成一個(gè) myapp.spec 文件。
4.2 編輯 .spec 文件
打開 myapp.spec 文件,你可以看到類似以下內(nèi)容:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(
['myapp.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='myapp',
debug=False,
strip=False,
upx=True,
console=False,
icon='myicon.ico',
)
coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='myapp',
)你可以在這個(gè)文件中進(jìn)行各種配置,例如添加數(shù)據(jù)文件、排除不必要的模塊等。
4.3 使用 .spec 文件構(gòu)建
保存并關(guān)閉 .spec 文件后,使用以下命令進(jìn)行構(gòu)建:
pyinstaller myapp.spec
5.創(chuàng)建虛擬環(huán)境,減少打包文件文件大小
一般打包時(shí),會(huì)將一些不必要的庫順帶一并打包進(jìn)程序中,這會(huì)造成打包后的文件非常大,因此可以通過安裝一個(gè)虛擬環(huán)境來進(jìn)行打包。


復(fù)制這個(gè)目錄。
然后,我們需要安裝兩個(gè)依賴包:
pip install virtualenv pip install virtualenvwrapper-win
如果網(wǎng)絡(luò)不佳,可使用國內(nèi)的鏡像庫進(jìn)行安裝:
pip install virtualenv -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple some-package
然后創(chuàng)建虛擬環(huán)境:
mkvirtualenv -p="C:\Users\jyw\AppData\Local\Programs\Python\Python311\python.exe" pyenv311
打開這個(gè)虛擬環(huán)境:
workon pyenv311

可以看到里面只有基本的庫。
然后我們?nèi)ミ\(yùn)行py文件,安裝缺失的必要庫,運(yùn)行成功后再打包即可。
若要?jiǎng)h除虛擬環(huán)境,使用 rmvirtualenv 命令刪除虛擬環(huán)境:例如,要?jiǎng)h除名為 pyenv311 的虛擬環(huán)境,可以運(yùn)行以下命令:
rmvirtualenv pyenv311
6. 測(cè)試生成的可執(zhí)行文件
構(gòu)建完成后,進(jìn)入 dist 目錄,運(yùn)行生成的可執(zhí)行文件:
cd dist myapp.exe
確保應(yīng)用程序能夠正常運(yùn)行,并且所有功能都能正常使用。
7. 分發(fā)可執(zhí)行文件
將 dist 目錄中的可執(zhí)行文件及其依賴文件(如果有)打包成一個(gè)壓縮包,發(fā)給需要用的人即可啦!!
到此這篇關(guān)于PyInstaller將Python打包成windows可執(zhí)行的exe(細(xì)致版)的文章就介紹到這了,更多相關(guān)PyInstaller打包Python內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 使用PyInstaller將Python腳本打包成exe的新手入門指南
- PyInstaller將Python腳本打包為可執(zhí)行文件的完整指南
- Python利用PyInstaller庫實(shí)現(xiàn)將腳本一鍵打包為EXE文件
- 使用PyInstaller打包Python腳本為可執(zhí)行文件的詳細(xì)指南
- 如何使用Python腳本控制PyInstaller打包實(shí)戰(zhàn)詳解
- PyInstaller打包Python腳本的使用示例
- python使用pyinstaller將代碼打包為exe程序
- 使用PyInstaller輕松實(shí)現(xiàn)將Python腳本打包成獨(dú)立的.exe可執(zhí)行文件
相關(guān)文章
基于Python自動(dòng)化實(shí)現(xiàn)Word文檔專業(yè)排版
在辦公自動(dòng)化領(lǐng)域,用 Python 處理 Word 文檔已經(jīng)是非常成熟和高效的方案了,本文將和大家使用Python實(shí)現(xiàn)自動(dòng)化Word文檔排版的相關(guān)知識(shí),希望對(duì)大家有所幫助2026-05-05
python3.6環(huán)境安裝+pip環(huán)境配置教程圖文詳解
這篇文章主要介紹了python3.6環(huán)境安裝+pip環(huán)境配置教程圖文詳解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06
Python深度學(xué)習(xí)pytorch神經(jīng)網(wǎng)絡(luò)塊的網(wǎng)絡(luò)之VGG
雖然AlexNet證明深層神經(jīng)網(wǎng)絡(luò)卓有成效,但它沒有提供一個(gè)通用的模板來指導(dǎo)后續(xù)的研究人員設(shè)計(jì)新的網(wǎng)絡(luò)。下面,我們將介紹一些常用于設(shè)計(jì)深層神經(jīng)網(wǎng)絡(luò)的啟發(fā)式概念2021-10-10
Python 內(nèi)置函數(shù)globals()和locals()對(duì)比詳解
這篇文章主要介紹了Python globals()和locals()對(duì)比詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
python進(jìn)階之多線程對(duì)同一個(gè)全局變量的處理方法
今天小編就為大家分享一篇python進(jìn)階之多線程對(duì)同一個(gè)全局變量的處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-11-11
python內(nèi)置數(shù)據(jù)類型之列表操作
數(shù)據(jù)類型是一種值的集合以及定義在這種值上的一組操作。這篇文章主要介紹了python內(nèi)置數(shù)據(jù)類型之列表的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11

