Python Pyinstaller-打包程序

2021-02-19 碼點小乾貨

        將Python腳本打包稱一個exe或者一個可運行的綠色程序,或者在linux中就是個可執行文件,不需要依賴Python環境了,很方便

        寫了一個腳本要在他的電腦中運行,但是基本很多人沒有安裝python的環境和一些必要的庫,要是一個個安裝的話就很不方便了

        所以可以使用pyinstaller來給程序打包,似乎還有其他的一些庫也可以實現,不過還是喜歡用這個,簡單粗暴,不過打包出來的exe確實挺大的,打包一時爽,打開五秒鐘。。。

 

1.使用的下載安裝的方式就這樣子

將需要打包的文件放在解壓得到的Pyinstaller文件夾中,打開cmd窗口,把路徑切換到當前路徑打開命令提示行,輸入以下內容(最後的是文件名):

2.使用的pip安裝方式就這麼來運行

打開cmd窗口,把路徑切換到文件所在路徑(文件隨便放在哪裡都行)打開命令提示行,輸入以下內容(最後的是文件名):

pip install pyinstaller 這個來安裝

注意的幾點:

1.打包的時候,py文件建議不要放在包含中文路徑下面的文件夾,不然容易出現錯誤,似乎一般都會出錯吧

2.打包好的程序顯示為亂碼的情況,這是編碼的問題,把第一行的#coding:utf-8 改成win dos的編碼方式,一般使用的是gbk,反正我每次gbk還是沒有亂碼

3.當出現打包成功,但是運行直接閃退的情況,這個時候可以在命令窗口中來看程序報的什麼錯誤,再調試

4.在打包使用到第三方庫的時候,若打包成功後運行失敗,找不到模塊的話,可以將這個庫複製一份到需要打包的文件目錄下

5.多進程打包的問題

正常情況下使用到多進程時在p』y』charm中運行時一切都Ok,很早之前寫的多進程的爬蟲,當我使用Pyinstaller打包成exe後,
每次程序都會發生錯誤,能運行,但是總是出錯,也就一直沒有去追究這個問題了,偶然間網上發現了解決的辦法,於是重新實驗下,
發現可以正常運行,這也就意味著我下次寫小工具的時候可以只用多進程來完成了,再打包成exe

github上的解決辦法:https:
1.Pyinstller版本應該在這個之間:3.0 < 3.3
2.創建一個mu.py文件,寫入以下代碼
import osimport systry: if sys.platform.startswith('win'): import multiprocessing.popen_spawn_win32 as forking else: import multiprocessing.popen_fork as forkingexcept ImportError:    import multiprocessing.forking as forkingif sys.platform.startswith('win'): class _Popen(forking.Popen): def __init__(self, *args, **kw): if hasattr(sys, 'frozen'): os.putenv('_MEIPASS2', sys._MEIPASS) try: super(_Popen, self).__init__(*args, **kw) finally: if hasattr(sys, 'frozen'): if hasattr(os, 'unsetenv'): os.unsetenv('_MEIPASS2') else:                        os.putenv('_MEIPASS2', '') forking.Popen = _Popen3.在主程序中導入此模塊
import mu4.在主程序中導入,在if __name__ == 『__main__』: 後面加入 multiprocessing.freeze_support()
if __name__ == '__main__': multiprocessing.freeze_support()

6.Pyinstaller打包exe後出現ImportError: No module named Queue的問題

在打包程序之後一切正常,但是在運行時報錯為:ImportError: No module named Queue
程序並沒有使用到此模塊
似乎是缺少queue模塊,但是打包應該是沒問題的
File 「site-packages\urllib3\packages\six.py」, line 92, in __get__File 「site-packages\urllib3\packages\six.py」, line 115, in _resolveFile 「site-packages\urllib3\packages\six.py」, line 82, in _import_moduleImportError: No module named 『queue』
之後使用
Pyinstaller -F –hidden-import=queue –icon=fun.ico pcap.pypause
不再提示此錯誤
–hidden-import MODULENAME,在打包過程中會屏蔽指定模塊

7.tk打包程序時需要修改圖標可以這麼做

讀取ico圖標作為原始數據存在腳本中,然後再寫出來,再讀取
首先讀取這個ico
import base64
open_icon = open("icon.ico", "rb")b64str = base64.b64encode(open_icon.read())open_icon.close()write_data = "img = '%s'" % b64strf = open("icon.py", "w+")f.write(write_data)f.close()然後複製數據存放在腳本的變量中
img = 'AAEAgIAAAAEAIAAoCAEA'tmp = open("tmp.ico", "wb+")tmp.write(base64.b64decode(img))tmp.close()root = Tk()root.iconbitmap('./tmp.ico')root.resizable(False, False)root.title('log日誌匯總工具'.decode('gbk'))root.geometry('752x670')os.remove('tmp.ico')最後移除此文件
這樣pyinstall打包稱exe就可以正常使用,修改exe gui的圖標

1.-F參數   直接生成單個exe文件首先cd 到這個文件的目錄下  pyinstaller -F test.py  生成的exe文件會在dist中 2.-D 參數 默認參數  生成一個和py文件名字相同的文件夾  裡面存放exe文件和各種依賴   這個exe需要和各個依賴在一起才能正常運行pyinstaller -D test.py 3.-w參數  生成的exe文件運行時沒有ui的,去掉了控制臺,簡單說就是沒有黑框框 4.–icon=path    指定打包時exe的圖標pyinstaller -F --icon=fun.ico database_test_py3_3.3.4.py 
5.-c 使用控制臺,這是默認選項

相關焦點

  • Python|Pyinstaller打包Python程序的過程詳解
    但, 小編在安裝時,不是走的這種方式,而是下載Pyinstaller的源文件,http://www.pyinstaller.org/downloads.html,命令行界面中cd到Pyinstaller的目錄下,執行python seteup.py install應用這種方式的需要自行先下載安裝pywin32庫,需要注意它的版本一定要與python的版本一致
  • Python打包發布神器—Pyinstaller
    的過程中,你肯定會遇到需要把.py腳本打包成.exe的情形,如此,至少有兩方面的好處:第一,你的代碼保密性更好,其他人不能直接看到python代碼;第二,打包後的exe程序無需再安裝相應的模塊即可直接使用;其中,第二條是我們做打包工作的主要考慮,方便工具的分發和使用。
  • pyinstaller-Python打包工具
    我百度了一下發現了一個Pyinstaller模塊,使用它可以將Python源文件打包成一個.exe應用程式,只要執行它不用安裝Python也可以執行了;使用pyinstaller庫對源文件打包非常簡單,在cmd中輸入pyinstaller Python文件名就可以,執行後,py文件所在目錄將生成dist和build兩個文件。其中build文件夾中保存的是臨時文件目錄可以安全刪除。
  • 利用pyinstaller打包Python程序為一個可執行文件
    目前(2020)最佳的策略是使用pyinstaller。pyinstaller不僅支持打包整個運行環境到一個可執行文件,而且還支持加密。但唯一的問題是,必須依賴外部的libc.so。兩個問題在pyinstaller中都無法解決,只能規避。因此,pyinstaller仍然無法幫助Python獲得像Golang、Rust那樣完美的打包效果,但也算比較接近了。
  • Python打包工具--Pyinstaller詳細介紹
    修改鏡像默認配置後完成了pyinstaller的下載後,終於趕在日落西山前將我這一行print代碼打包成了exe文件,發給同事炫耀。現在想想好幼稚...也許就是因為pyinstaller這傢伙,導致我的python路線直接跳過基礎,從easygui和tkinter開始了...有exe如果再能配上GUI,那豈不是裝13必備。
  • 用python打包exe應用程式-PyInstaller
    /Linux/MacOS三大主流平臺,能夠把 Python 腳本及其所在的 Python 解釋器打包成可執行文件,從而允許最終用戶在無需安裝 Python 的情況下執行應用程式。PyInstaller 製作出來的執行文件並不是跨平臺的,如果需要為不同平臺打包,就要在相應平臺上運行PyInstaller進行打包。2、PyInstaller安裝有時候會安裝失敗?
  • 三個你必須要記住的Pyinstaller打包命令——利用Python實現打包exe
    PS: 如果打包為exe的話,版本儘量選擇python3.6+32位版本,因為win64位系統向下兼容32位程序,但是如果不考慮32位系統的話無所謂,直接python64位版本直接打包就可以,只是只能在win64位系統上跑。
  • Python實現貪吃蛇小遊戲!!pyinstaller打包成exe!
    pygame允許你在 Python 程序中創建功能豐富的遊戲和多媒體程序,是一個高可移植性的模塊可以支持多個作業系統,用它來開發小遊戲非常適合。pip install pygame -i http://pypi.douban.com/simple --trusted-host pypi.douban.com利用python的pygame第三方庫和面向對象編程的方法,實現簡單的貪吃蛇小遊戲,還可用pyinstaller打包成exe,方便自己想玩的時候直接點開或者分享給別人
  • Pyinstaller打包,文件太大了怎麼辦?
    直接用Pyinstaller,打開cmder:pyinstaller -Fw E:\test\url_crawler.py (-F 是打包成一個文件,-w是不出現調試窗口,因為我的小工具裡有GUI,所以不用默認的調試窗口
  • 【python學習第七篇】Python 程序打包成 exe 可執行文件
    安裝完後,檢查安裝成功與否:pyinstaller 安裝成功後,就可以使用下面的命令了:pyinstaller : 打包可執行文件的主要命令,詳細用法下面會介紹。        需要注意的是,PyInstaller 打包的執行文件,只能在和打包機器系統同樣的環境下。也就是說,不具備可移植性,若需要在不同系統上運行,就必須針對該平臺進行打包。實踐問題        pyinstaller 打包後的 exe 運行怎麼去掉彈出的命令行提示窗口?        1.
  • 如何將 Python 程序打包成 .exe 文件?
    於是我想是不是可以將我的程序打包成可執行文件,直接運行?就像這樣:helloPython 程序都是腳本的方式,一般是在解析器裡運行,如果要發布出去,需要提前安裝解析器才可以運行,為了在 Windows 裡方便發布,只要點擊一個 EXE 文件運行,並且打包所需要庫文件,這樣發布給用戶使用就會更方便。
  • Python文件打包成exe可執行程序
    背景 有時寫的Python程序需要交給業務人員使用,但業務人員電腦上基本都沒有安裝Python,並且業務人員也不會使用命令行,所以就需要把
  • 想把 python 代碼打包為 exe 程序?只要這簡單三步就能搞定啦~
    最近有部分小夥伴問我,python 寫的項目可不可以打包成 exe 程序,放到沒有 python 環境上的電腦中執行?答案當然是可以的。python 有一個叫做 pyinstaller 的第三方庫,是專門用來將 python 程序打包 exe 程序的。今天就專門給大家分享一下如何進行打包,使用之前需要大家先使用 pip 進行安裝。
  • Python打包利器:auto-py-to-exe
    什麼是auto-py-to-exeauto-py-to-exe 是一個用於將Python程序打包成可執行文件的圖形化工具。本文就是主要介紹如何使用 auto-py-to-exe 完成 python 程序打包。
  • 用PyInstaller將python程序轉成exe文件執行
    最近剛接手幾臺windows伺服器,寫了幾個自動備份數據的python腳本,要放到windows下去執行,一般來說如果要windows能執行python腳本,第一要在windows機器上安裝python ,另外還要配置windows環境變量能讓腳本執行,如果1~2臺windows還好,如果上百臺都要安裝python,然後在設置環境變量,估計要瘋,當然如果再寫一個安裝程序、部署環境變量,我估計也不是不可能
  • Python學習筆記:打包和發布
    該模塊的命令行語法如下:1python -m zipapp source [options]在上面命令中,source參數代表要打包的Python源程序或目錄,該參數既可以是單個的Python文件,也可以是文件夾。如果source參數是文件夾,那麼zipapp模塊會打包該文件夾中的所有Python文件。
  • 別再問我怎麼Python打包成exe了!
    PS: 如果打包為exe的話,版本儘量選擇python3.6+32位版本,因為win64位系統向下兼容32位程序,但是如果不考慮32位系統的話無所謂,直接python64位版本直接打包就可以,只是只能在win64位系統上跑。安裝pyinst
  • 分享你的程序,學會打包.py文件
    有的時候我們寫出一些實用的腳本,小程序想要分發給朋友同事們使用,但是沒有python環境是不能運行.py文件的,要運行的話先要有python解釋器,還要對照代碼下載相應的第三方包,這就很麻煩了。所以我們需要將.py文件打包為.exe文件,再分享出去就可以直接運行了。
  • PyQt5:PyQt5程序打包2
    虛擬環境下打包這裡使用工具是virtualenv,這個是什麼東東請自行百度。然後我們再使用命令打包一下:pyinstaller -F -w --i "C:\\Users\\Administrator\\Desktop\\PyQt5Calculator\\res\\cc.ico" calculator.py打包後的程序大小是27.3MB,小了幾MB。
  • 來學Python啦,Pyinstaller庫及科赫雪花小包裹問題分析
    作用:打包代碼為可執行文件。至於為什麼要轉換成可執行文件呢?To:因為在他人的電腦上並非安裝有Python的IDLE或Python的解釋器,因此需要將.py原始碼轉換成無需原始碼的可執行文件。此庫為第三方庫,在cmd窗口下下載命令:pip install pyinstaller使用說明:在原始碼所在目錄下打開cmd窗口輸入:pyinstaller -F <文件名.py>庫常用參數 :Pyinstaller-h:查看幫助pyinstaller