亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python使用pyinstaller將代碼打包為exe程序

 更新時間:2024年11月04日 10:20:52   作者:仙草哥哥  
這篇文章主要為大家詳細介紹了python如何使用pyinstaller將代碼打包為exe程序,文中的示例代碼講解詳細,有需要的小伙伴可以參考一下

打包exe

對于不懂程序的人來說,可能有這樣一個認識上的誤區(qū):只有能夠直接打開的exe才是平常經(jīng)常見到的程序,py文件不能算是程序。

在這種情況下,一些python的使用者可能非??鄲溃涸趺床拍軌蜃屛业某绦颍雌饋硐袷钦嬲某绦蚰??

實際上,通過pyinstaller,我們就可以輕松將python代碼打包為常見的exe程序,再也不會被他人看不起了(誤)。

基礎單文件

pyinstaller安裝

使用pip安裝pyinstaller:pip install pyinstaller

準備文件

我們需要準備一個需要打包的單文件,例如hello_world.py

print("hello world!!")
 
# 為了防止我們的程序太快直接結(jié)束看不出效果
# 我們添加一個input()阻塞程序
input()

如果按照平常的使用,應該使用:python hello_world.py運行程序

使用pyinstaller打包

使用指令:pyinstaller --onefile hello_world.py

此時,會看到當前目錄下已經(jīng)生成了很多文件

 在dist目錄下,就包含了我們已經(jīng)生成好的hello_world.exe,通過雙擊運行,就可以看到程序運行的結(jié)果。

隱藏控制臺窗口

如果你不需要一個控制臺窗口,可以添加--noconsole選項。

pyinstaller --onefile --noconsole main.py

注意:如果你不需要控制臺窗口,那么就不應該使用像input這樣的需要控制臺的函數(shù)。

通常,對于gui程序,隱藏控制臺窗口是很有必要的。下面是一個簡單的查看本地ip的例子(需要安裝requests庫)。

import tkinter as tk
from tkinter import scrolledtext
import requests
 
 
def fetch_data():
    try:
        response = requests.get("http://httpbin.org/get")
        response.raise_for_status()
        data = response.json()
        info = f'您的當前的ip地址是:{data.get("origin")}'
        
        text_area.delete("1.0", tk.END)
        text_area.insert(tk.END, info) 
    except requests.RequestException as e:
        text_area.delete("1.0", tk.END)
        text_area.insert(tk.END, f"請求失敗: {e}")
 
window = tk.Tk()
window.title("查看本地ip")
 
text_area = scrolledtext.ScrolledText(window, width=60, height=20)
text_area.pack(padx=10, pady=10)
 
 
fetch_button = tk.Button(window, text="獲取數(shù)據(jù)", command=fetch_data)
fetch_button.pack(pady=5)
 
window.mainloop()

對于這樣一個程序,實際上是完全用不到控制臺窗口的,所以隱藏窗口是更好的。

添加圖標

默認的圖標是很丑的(如圖所示),如果我們需要我們的軟件有一個更好看的圖標,需要自己提供一個圖標文件。

通過添加--icon=your_icon.ico選項,來為你的程序設置圖標。

pyinstaller --onefile --icon=my_icon.ico main.py

圖標不應該直接用一個圖片作為圖標,我們先需要通過程序制作一個圖標,這里需要使用pillow庫:

from PIL import Image
 
img = Image.open("我的圖片.png")
 
# 為適應顯示需求,可能需要考慮生成多個不同尺寸的icon
img = img.resize((256, 256))
 
img.save("my_icon.ico", format="ICO")

現(xiàn)在,我們使用剛剛制作的圖標,進行打包即可,下圖為某個經(jīng)典病毒的標志,但其實是我們自己制作圖標并打包的,因此只是一個圖片而已,并不是真的病毒程序。

注意:你可能遇到系統(tǒng)圖標緩存未及時更新的問題,也就是說,你已經(jīng)設置好了圖標,但是由于系統(tǒng)沒能及時更新并顯示,你看到的仍然還是默認圖標,因此懷疑自己是不是操作錯了。其實這是沒什么影響的,但如果你是一個急性子,一定要現(xiàn)在就看到效果,在windows系統(tǒng)中可以嘗試輸入命令ie4uinit.exe -show。

多文件程序

讀取資源文件(相對路徑)

假設,我們的程序需要通過json讀取某個文件,這是一個json文件:

["跟仙草學py", "笑話大全", "綠野仙蹤", "怎么樣同莎碧交流"]

下面是我們的程序:

import json
 
with open("book.json", "r", encoding="utf-8") as f:
    books = json.load(f)
    
for i in books:
    print(i)

那么,打包以后,是否還能正常使用呢?首先,我們應該明確一件事情,雖然我們自己知道我們需要一個json文件,但是目前對于pyinstaller來說,其并不知道這一點,因此,打包后,仍然只有單一的程序。

此時,我們可以選擇將book.json(也就是我們需要用的存檔文件),手動移動到程序路徑下,這樣就可以按照原本的相對路徑讀寫。

讀取資源文件(打包入exe)

對于資源文件,我們可以在打包指令上提出我們需要這些文件,使用--add-data選項添加,格式為:

對于windows系統(tǒng),使用資源文件;目標路徑

對于linux系統(tǒng),使用資源文件:目標路徑

pyinstaller --onefile --add-data "book.json;." main.py

如果需要添加多個文件,可以多次使用--add-data,如果要添加整個目錄,也可以使用通配符*。

如果我們這樣做,情況將有所不同,此時文件并不存放在普通文件目錄中,而是在臨時的目錄中,因此必須要修改原本的程序代碼。

import json
import sys
import os
 
# 獲取資源文件的路徑
if hasattr(sys, "_MEIPASS"):
    resource_path = os.path.join(sys._MEIPASS, "book.json")
else:
    resource_path = "book.json"
 
with open(resource_path, "r", encoding="utf-8") as f:
    books = json.load(f)
 
for i in books:
    print(i)

通常情況下,為了簡化代碼,在多處使用路徑,應該封裝這樣一個函數(shù):

import sys
import os
 
def resource_path(relative_path):
    if hasattr(sys, "_MEIPASS"):
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)
 
# 在代碼中這樣引入
resource_path = resource_path("book.json")

注意:sys._MEIPASS指向的目錄是只讀屬性的,并不適合寫入或者修改,因此,只應該用于資源的讀取。如果有寫入需求,應該將數(shù)據(jù)寫入到用戶系統(tǒng)的持久目錄中(或者使用相對路徑,并提示用戶應該總是將文件整個目錄一起移動)。

import文件導入

假如,我們需要通過import導入配置文件,例如,settings.py:

key = "sagegrass"

然后在程序中通過import導入

from settings import key
 
print(key)

如果是這樣的情況,那么無需擔心導入文件會無法處理,通常交給pyinstaller自動解決即可。

我們只需要像普通打包一樣,使用:pyinstaller --onefile main.py,而無需關(guān)心settings.py是否被包含。

注意:雖然pyinstaller可以處理直接導入,但是,無法處理動態(tài)導入,如果遇到這種情況,可以使用--hidden-import=module_name,進行手動導入。

引用與致謝

pyinstaller

使用pyinstaller打包確實有一些優(yōu)點,包括:

  • 簡化部署:目標機器上無需有python環(huán)境,可以直接通過打包好的程序運行。
  • 支持隱藏代碼邏輯:python是一種明文的代碼,因此任何人都能夠查看源代碼,而打包后可以一定程度上隱藏源代碼,使得明文代碼不直接可見(注意:專業(yè)的黑客或安全人員是有能力將其逆向還原的,因此,這并不是非??煽康谋WC源代碼不可見的方法)。

當然,同樣也有一些缺點:

  • 生成文件體積較大:由于python解釋器,依賴庫等都會被打包,即使是非常簡單的一句代碼,打包后都會變大很多。
  • 加載速度慢:打包為exe的性能遠不如原生的py代碼,尤其是對于onefile模式,運行時需要先解壓,這個過程也會消耗很多時間

因此,要根據(jù)你的情況考慮是否使用pyinstaller,通常特別適合用于給不懂代碼,沒有python環(huán)境的人提供可執(zhí)行程序的時候使用。

以上就是python使用pyinstaller將代碼打包為exe程序的詳細內(nèi)容,更多關(guān)于python pyinstaller代碼打包為exe的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 關(guān)于Python中模塊的簡介、定義與使用

    關(guān)于Python中模塊的簡介、定義與使用

    這篇文章主要介紹了關(guān)于Python中模塊的簡介、定義與使用,模塊是Python的重要組成部分,需要的朋友可以參考下
    2023-04-04
  • python利用cv2庫讀取和保存視頻的操作步驟

    python利用cv2庫讀取和保存視頻的操作步驟

    這篇文章主要介紹了python利用cv2庫讀取和保存視頻的操作步驟,文中通過代碼示例給大家講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-04-04
  • 利用 python 對目錄下的文件進行過濾刪除

    利用 python 對目錄下的文件進行過濾刪除

    這篇文章主要給大家介紹了關(guān)于如何利用 python 對目錄下的文件進行過濾刪除的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-12-12
  • django有外鍵關(guān)系的兩張表如何相互查找

    django有外鍵關(guān)系的兩張表如何相互查找

    這篇文章主要介紹了django有外鍵關(guān)系的兩張表如何相互查找,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Python+django實現(xiàn)文件上傳

    Python+django實現(xiàn)文件上傳

    本系列以可操作性為主,介紹如何通過django web框架來實現(xiàn)一些簡單的功能。每一篇文章都具有完整性和獨立性。使用新手在動手做的過程中體會web開發(fā)的過程,過程中細節(jié)請參考相關(guān)文檔。
    2016-01-01
  • Python的Flask框架中@app.route的用法教程

    Python的Flask框架中@app.route的用法教程

    這篇文章主要介紹了Python的Flask框架中@app.route的用法教程,包括相關(guān)的正則表達式講解,是Flask學習過程當中的基礎知識,需要的朋友可以參考下
    2015-03-03
  • Python與xlwings黃金組合處理Excel各種數(shù)據(jù)和自動化任務

    Python與xlwings黃金組合處理Excel各種數(shù)據(jù)和自動化任務

    這篇文章主要為大家介紹了Python與xlwings黃金組合處理Excel各種數(shù)據(jù)和自動化任務示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2023-12-12
  • pyinstaller打包可執(zhí)行文件出現(xiàn)KeyError的問題

    pyinstaller打包可執(zhí)行文件出現(xiàn)KeyError的問題

    這篇文章主要介紹了pyinstaller打包可執(zhí)行文件出現(xiàn)KeyError的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • python實現(xiàn)GATK多線程加速示例

    python實現(xiàn)GATK多線程加速示例

    這篇文章主要為大家介紹了python實現(xiàn)GATK多線程加速示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 對pytorch網(wǎng)絡層結(jié)構(gòu)的數(shù)組化詳解

    對pytorch網(wǎng)絡層結(jié)構(gòu)的數(shù)組化詳解

    今天小編就為大家分享一篇對pytorch網(wǎng)絡層結(jié)構(gòu)的數(shù)組化詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12

最新評論