前言
常用python的開發(fā)者現(xiàn)在也是很多的,用python可以做很多事情,如果涉及到python桌面開發(fā)一定會使用PyInstaller將程序打包成執(zhí)行程序,如果要求更高的話還會再次封裝成安裝程序(工具inno setup)。
執(zhí)行程序就是復(fù)制到其他電腦可以直接運(yùn)行,不需要安裝配置python環(huán)境。
安裝程序就是我們?nèi)粘0惭b的軟件,會指引下一步安裝,可以選擇安裝位置。
一、PyInstaller
PyInstaller是一個在Windows、GNU/Linux、macOS等平臺下將Python程序凍結(jié)(打包)為獨(dú)立可執(zhí)行文件的工具, 用于在未安裝Python的平臺上執(zhí)行Python編寫的應(yīng)用程序。其實(shí)主要還是看參數(shù)如何使用。
二、安裝PyInstaller庫
本片博客是使用清華pip源安裝。官方文檔請看PyInstaller。
pip install PyInstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/
三、PyInstaller的使用
本博客主要介紹2種方式,這2種方式都會生成.spec文件,PyInstaller就是以spec文件來完成打包工作的。
1.命令行+參數(shù)
這是我們常用的方式,也是很多人百度得到的結(jié)果,大多數(shù)都是直接服用他人的命令和參數(shù)。
代碼如下(示例):
# 基礎(chǔ)命令
pyinstaller myscript.py
# 初次打包建議添加-c參數(shù),可以同過cmd黑窗口查看打包問題
pyinstaller -c myscript.py
# 生成一個單獨(dú)的exe文件,適合無文件操作的程序
pyinstaller -F myscript.py
# 生成一個單獨(dú)的exe文件,適用windows系統(tǒng),適合無文件操作的程序,下面2個是一樣的效果。
pyinstaller -F -w myscript.py
pyinstaller -F --windowed myscript.py
# 生成一個文件夾,文件夾中包含exe執(zhí)行程序,適合有一定文件夾或文件的操作程序。
pyinstaller -D --windowed myscript.py
# 針對文件生成的最終位置,使用--distpath=參數(shù)指定
pyinstaller -D --windowed --distpath='C:\Users\lenovo\PycharmProjects\程序打包文件' myscript.py
# 針對文件生成的exe文件名字,使用--name=TYQT參數(shù)指定
pyinstaller -D --windowed --distpath='C:\Users\lenovo\PycharmProjects\程序打包文件' --name='TYQT' myscript.py
# 針對文件生成的exe的圖標(biāo),使用--icon=參數(shù)指定,zaiwindows系統(tǒng)下,需要使用ico圖標(biāo),如果是png直接百度在線轉(zhuǎn)
pyinstaller -D --windowed --distpath='C:\Users\lenovo\PycharmProjects\程序打包文件' --name='TYQT' --icon='icon.ico' myscript.py
# 針對exe程序以來的文件夾和文件,使用--add-data(比如.txt)和--add-binary(程序可能依賴其他.exe命令)參數(shù)指定
# --add-data和--add-binary參數(shù)實(shí)際是2個文件,在windows是通過;分號區(qū)分復(fù)制前和后的,在linux的符號是:。
# 下邊的語句就是將項目的data/excel/訂單記錄表.xlsx文件復(fù)制到C:\Users\lenovo\PycharmProjects\程序打包文件\myscript\data\excel文件夾下,myscript\data\excel會自動創(chuàng)建。
pyinstaller -D --windowed --distpath='C:\Users\lenovo\PycharmProjects\程序打包文件' --name='TYQT' --icon='icon.ico' --add-data=data/excel/訂單記錄表.xlsx;./data/excel myscript.py
2.py文件+參數(shù)
2.1配置文件config.py
這里以pyqt5項目為例,myscript.py是我們的程序,就是將myscript.py打包成執(zhí)行程序exe。
在main.py文件同級有配置文件config.py,內(nèi)容如下:
import os
import logging
from pathlib import Path
# 1.根目錄
BASE_DIR = Path(__file__).resolve().parent # os.path.abspath('.')和os.getcwd() 在Linux上只能獲取到/home/ubuntu目錄
Data_path = os.path.join(BASE_DIR, 'data')
if not os.path.isdir(Data_path):
os.mkdir(Data_path)
# 2.Excel資源文件夾
Excel_Explorer = os.path.join(Data_path, 'excel')
if not os.path.isdir(Excel_Explorer):
os.mkdir(Excel_Explorer)
print('Excel_Explorer', Excel_Explorer)
# 6.日志
log_path = os.path.join(BASE_DIR, 'logs')
if not os.path.isdir(log_path):
os.mkdir(log_path)
logging.basicConfig(level=logging.INFO,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename=os.path.join(log_path, 'log.log'),
filemode='a')
logger = logging.getLogger()
2.2打包文件pyTexe.py
在main.py文件同級創(chuàng)建pyTexe.py文件,內(nèi)容如下:
# -*- coding:utf-8 _*-
"""
@author:lenovo
@file: pyTexe.py
@time: 2023/3/15 9:24
"""
import os.path
import PyInstaller.__main__
from config import BASE_DIR
PyInstaller.__main__.run([
'main.py',
'--icon=' + os.path.join(BASE_DIR, 'imgs', 'icon.ico'),
'--name=TYQT',
'-w', # windows系統(tǒng)
'-D',
'--add-data=data/excel/訂單記錄表.xlsx;./data/excel',
'--add-data=README.md;.',
'--distpath=' + r'C:\Users\lenovo\PycharmProjects\TYCQT\TYQT\程序打包文件',
# '--paths=' + r'C:\Users\lenovo\PycharmProjects\TYCQT\venv\Lib\site-packages',
])
# 參數(shù):雙--后跟=
# -F: 創(chuàng)建單文件捆綁可執(zhí)行文件,只生成exe文件
# -w: 執(zhí)行系統(tǒng):windows
# -D: 創(chuàng)建包含可執(zhí)行文件的單文件夾捆綁包(默認(rèn))
# -i: exe桌面圖標(biāo)
# -v:版本號
# -c:顯示命令行窗口
# -h:顯示幫助
# --name=要分配給捆綁應(yīng)用和規(guī)范文件的名稱 (默認(rèn)值:第一個腳本的基本名稱)
# --add-data= <>;要添加到可執(zhí)行文件的其他非二進(jìn)制文件或文件夾。
# --add-binary= <>;要添加到可執(zhí)行文件的其他二進(jìn)制文件。
# --copy-metadata=復(fù)制指定包的元數(shù)據(jù)。
# –-distpath=指定打包后的程序存放目錄,默認(rèn)存放在當(dāng)前目錄下的(新建的)dist目錄
# –-workpath=為輸出的所有臨時文件指定存放目錄
# --python-option=python解釋器
# --paths=搜索導(dǎo)入庫的路徑(如使用PYTHONPATH)
# --hiddenimport=將python隱藏的包主動打包
# --exclude-module=忽略指定的包
2.3 執(zhí)行pyTexe.py
如果是cmd 窗口,切換至項目目錄下,執(zhí)行python pyTexe.py命令,會生成.spec文件,并創(chuàng)建了程序打包文件文件夾。
python pyTexe.py
四、exe附加參數(shù)執(zhí)行
main.py文件如下
import sys
if __name__ == '__main__':
arg = sys.argv(1)
print('arg',arg)
未打包前命令行執(zhí)行命令如下
python main.py arg
通過上述方法打包成exe后,通過命令行執(zhí)行命令如下文章來源:http://www.zghlxwxcb.cn/news/detail-648231.html
TYQT.exe arg # arg為命令行參數(shù),在main.py中可以獲取,用于處理函數(shù)
總結(jié)
本博客記錄PyInstaller的使用,一方面是做個記錄方便日后使用,一方面是希望幫助同學(xué)少走彎路。文章來源地址http://www.zghlxwxcb.cn/news/detail-648231.html
到了這里,關(guān)于【Python】項目打包:如何使用PyInstaller打包python程序(exe)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!