2022-04-12日覆盤
打包
# 安裝
pip install pyinstaller
1.exe打包
-
支援,win/mac
- win 平臺上只能打windows的包;
- mac 上只能打出 mac 的程式;
-
一般打包的時候結合虛擬環境進行打包;
-
專案開發步驟
-
建立虛擬環境
-
開發 。。。
-
# 開發完畢 pip freeze > requirements.txt
-
如果是其他平臺的需求,安裝虛擬機器(mac),匯入依賴包
pip install -r requirements.txt
-
打包
Pyinstaller -F xxxx
-
產出 demo.exe;
-
注意:如果不需要跨平臺,可以直接進行打包;
-
-
命令總覽
2.多檔案打包
說明:多檔案打包指的是生成多個檔案;
# 命令
pyinstaller -D app.py
3.單檔案打包
說明:單檔案打包指的是生成單個檔案;
# 命令
pyinstaller -F app.py
dist目錄下僅一個檔案,為app.exe
;
4.檔案路徑
使用多檔案進行打包,並使用- n
指定名稱;
import time text=input("請輸入>>>") print(text) with open('account.txt','r',encoding='utf8')as fp: data=fp.read() print(data)
使用改方法的時候,執行的時候會報錯,因此我們需要使用os模組進行抽取,也可以實現程式碼的解耦,實現開閉原則。
BASE_DIR=os.path.dirname(os.path.abspath(__file__))
# v=os.path.abspath(__file__) # 獲取指令碼檔案所在的物理路徑 >>> E:\newpythoncode\bilibili\app.py
print(BASE_DIR) # E:\newpythoncode\bilibili
# dirname:去掉檔名,返回上級目錄
修改原來的程式
備註:當程式出現錯誤的時候會直接進行終止程式,強行退出;
import time
import os
BASE_DIR=os.path.dirname(os.path.abspath(__file__))
text=input("請輸入>>>")
print(text)
# 使用os.path.join()進行拼接。
with open(os.path.join(BASE_DIR,'account.txt'),'r',encoding='utf8')as fp:
data=fp.read()
print(data)
多檔案打包時一般不報錯。
單檔案打包時會報錯,因為單檔案打包的檔案執行的時候會將程式進行解壓。隨後會在解壓的(執行時的臨時目錄)檔案中進行尋找;
import sys
print(sys.argv)
>>> ['E:/newpythoncode/bilibili/test.py']
# sys.argv[0] 'E:/newpythoncode/bilibili/test.py'
輸出 python 直譯器後的目錄,打包後表示 exe 檔案的所在檔案;
import sys
import os
print(sys.argv[0])
# realpath() 找到當前路徑的絕對路徑
print(os.path.realpath(sys.path[0]))
補充:
使用上述過程依舊報錯,可能是由於版本等問題,此時可以在配置檔案中進行修改,然後重新打包;
點選檢視 : 參考文章
datas=[
('account.txt','.')# 檔名,後面猜測是相對的路徑;
]
# 執行命令
pyinstaller -D 哈哈哈.spec
# >>> 生成目錄中會直接包含檔案
執行成功
5.匯入自定義包
導包一般有兩種情況 : 普通導包和動態匯入
5.1 預設匯入
說明:在導包的時候不管是直接匯入的,還是間接(匯入包中的匯入)都會直接進行匯入;不會出現異常;
5.2 動態匯入
import importlib
# from utils.db import get_db
from utils.encrypted import md5
print("------開始執行--------")
pk=importlib.import_module("utils.db")
res=pk.get_db()
print(res)
data=md5()
print(data)
input("按回車鍵退出>>>")
說明:此匯入包的方式一般會結合這反射進行使用,從而使得 python 的配置檔案更好的遵循開閉原則,從而降低程式碼之間的耦合度。
此時會報錯,因為動態匯入的時候就需要識別程式,所以我們可以在配置檔案哈哈哈.spec
中進行手動新增。
# 執行命令
pyinstaller -D 哈哈哈.spec # 自己需要指定配置檔案;
配置後正常執行。
6.補充
-
生成圖示
# 需要 img.ico 檔案 # 指定檔案的路徑即可 pyinstall -i img.ico -n name -w -D main.py
其他的功能的新增可以參考命令中的提示!
-
說明
打包,最常用於是打包桌面程式(pyqt5),控制檯程式一般很少使用;
控制檯一般用於某些指令碼的執行,例如,爬蟲指令碼,直接交給使用者執行即可;
大江東去,浪淘盡,千古風流人物。