Python打包工具--Pyinstaller詳細介紹

2021-02-20 清風Python


前幾篇寫了一些將python代碼打包成exe工具的文章,很多朋友私下問我,是通過什麼工具操作的,如何是使用,今天就詳細給大家介紹一下這個工具的使用。


Pyinstaller這個庫是我用pip下載的第一個模塊。為什麼?因為第一次接觸python的時候,就是看到網上有人用Python編寫的工具,可以直接運行在windows機器下。

這種脫離編譯環境/虛擬機而單獨運行的能力是我一直期待的,有人會問為什麼不學c++?

因為,這老哥頭髮讓我有些慌....

然後我上網搜了一下python,當看到python之父那茂密的頭髮時,更堅定了我學習python的信念。(可惜的是大兄弟最近已宣布退休了)


由於我這人沉不住氣,一分鐘學習了python安裝+print輸出,就急著去網上搜索如何打包寫好的代碼,轉化為exe文件....順著這條主線安裝了pip,公司內外網隔離,又千般周折找到了公司自身的鏡像源。修改鏡像默認配置後完成了pyinstaller的下載後,終於趕在日落西山前將我這一行print代碼打包成了exe文件,發給同事炫耀。
現在想想好幼稚...

也許就是因為pyinstaller這傢伙,導致我的python路線直接跳過基礎,從easygui和tkinter開始了...
有exe如果再能配上GUI,那豈不是裝13必備。但在沒有基礎的前提下去學這些東西,可想而只當時有多苦B。
最終慢慢玩膩了,才重新一步步從基礎開始學起。

最近項目在做一個集成打包工具,需要在Linux環境下將很多基礎環境通過腳本進行自動化的打包、安裝、運行。本來是打算通過shell完成了,但由於模塊很多,又牽扯大批量的配置文件,所以最終選擇了python。但最終客戶方要求,執行的腳本可以在一臺全新的網絡隔離的機器上進行運行。這就苦惱了,因為python雖然配置了requirement,但還是依賴鏡像源去下載模塊。雖然當時想到了pyinstaller,但可惜使用它在windows環境下使用的,這次是Linux環境。然後上網搜了一圈,最終又回到了pyinstaller....

PyInstaller is a program that converts (packages) Python programs into stand-alone executables, under Windows, Linux, Mac OS X, AIX and Solaris.Its main advantages over similar tools are that PyInstaller works with any version of Python since 2.3, it builds smaller executables thanks to transparent compression, it is fully multi-platform, and uses the OS support to load the dynamic libraries, thus ensuring full compatibility.

突然想起一首蕭亞軒的歌「最熟悉的陌生人」(是否暴露了年齡...),很多時候我們對身邊自認為熟識的東西,反而遺漏了太多。

安裝
pip install pyinstaller

注意
windows下使用它時,需要依賴pywin32模塊,好在這個模塊從3.3那時的exe安裝,已經遷移到了pip,默認安裝時,可以安裝此依賴。
Linux下使用它時,需要依賴python-devel 。往往python在首次編譯時就要添加此依賴。否則後期需要重新編譯安裝...

配置
windows下pyinstaller安裝完成後,會在{PythonPath}/Scripts下,python2很多版本沒有默認將次目錄添加至環境變量,需要手動進行添加。

linux下此目錄在${PythonPath}/bin下,需要創建連結後進行使用。
ln -s {PythonPath}/bin/pyinstlaler /usr/bin

參數說明
-F, –onefile
打包一個單個文件,如果你的代碼都寫在一個.py文件的話,可以用這個,如果是多個.py文件就別用-D, –onedir打包多個文件,在dist中生成很多依賴文件,適合以框架形式編寫工具代碼,我個人比較推薦這樣,代碼易於維護-K, –tk在部署時包含 TCL/TK-a, –ascii不包含編碼.在支持Unicode的python版本上默認包含所有的編碼.-d, –debug產生debug版本的可執行文件-w,–windowed,–noconsole使用Windows子系統執行.當程序啟動的時候不會打開命令行(只對Windows有效)-c,–console,-nowindowed使用控制臺子系統執行(默認)(只對Windows有效)pyinstaller -c xxxx.pypyinstaller xxxx.py --console-s,-strip可執行文件和共享庫將run through strip.注意Cygwin的strip往往使普通的win32 Dll無法使用.-X, –upx如果有UPX安裝(執行Configure.py時檢測),會壓縮執行文件(Windows系統中的DLL也會)(參見note)

-o DIR, 

-out=DIR

指定spec文件的生成目錄,如果沒有指定,而且當前目錄是PyInstaller的根目錄,會自動創建一個用於輸出(spec和生成的可執行文件)的目錄.如果沒有指定,而當前目錄不是PyInstaller的根目錄,則會輸出到當前的目錄下.

-p DIR, 

-path=DIR

設置導入路徑(和使用PYTHONPATH效果相似).可以用路徑分割符(Windows使用分號,Linux使用冒號)分割,指定多個目錄.也可以使用多個-p參數來設置多個導入路徑,讓pyinstaller自己去找程序需要的資源–icon=<FILE.ICO>將file.ico添加為可執行文件的資源(只對Windows系統有效),改變程序的圖標 pyinstaller -i ico路徑 xxxxx.py–icon=<FILE.EXE,N>將file.exe的第n個圖標添加為可執行文件的資源(只對Windows系統有效)

-v FILE, 

-version=FILE

將verfile作為可執行文件的版本資源(只對Windows系統有效)

-n NAME, 

-name=NAME

可選的項目(產生的spec的)名字.如果省略,第一個腳本的主文件名將作為spec的名字

看這參數這麼多,其實很簡單....

通用參數

-p
這個參數如說明所示,雖然pyinstaller可以將代碼import導入的依賴包進行打包,但有時,我們自己開發的代碼,可能會忽視,那就需要我們通過-p 參數手動引入了

-F
默認pyinstaller打包後,會將依賴文件和執行文件打包成一個文件夾的,如果使用-F參數,則可以將所有依賴打包成一個單獨的文件,windows為exe文件,linux 直接 chmod +x filename即可執行....
好了,通用的就這倆

windows下使用的參數不建議使用的參數

說那麼多不如看個圖來的方便,我們用pyinstaller打包一個簡單的Flask程序,看看能否成功吧:

我們看到使用pyinstaller 打包程序時,會顯示生成build將工具依賴的文件放入,然後進行打包操作生成代碼文件同名並以spec的配置文件,最終將打包成功的exe保存在dist文件夾內。

大家注意為什麼第一次執行的時候提示server error。因為雖然我們將python文件打包了,但是Flask依賴的html模板文件它時不支持打包的,需要我麼單獨拷貝到對應的文件中,才能執行....

相關焦點

  • Python打包發布神器—Pyinstaller
    的過程中,你肯定會遇到需要把.py腳本打包成.exe的情形,如此,至少有兩方面的好處:第一,你的代碼保密性更好,其他人不能直接看到python代碼;第二,打包後的exe程序無需再安裝相應的模塊即可直接使用;其中,第二條是我們做打包工作的主要考慮,方便工具的分發和使用。
  • pyinstaller-Python打包工具
    我百度了一下發現了一個Pyinstaller模塊,使用它可以將Python源文件打包成一個.exe應用程式,只要執行它不用安裝Python也可以執行了;使用pyinstaller庫對源文件打包非常簡單,在cmd中輸入pyinstaller Python文件名就可以,執行後,py文件所在目錄將生成dist和build兩個文件。其中build文件夾中保存的是臨時文件目錄可以安全刪除。
  • python項目打包之Pyinstaller
    而本公眾號的作者當時也受到這股風潮的撩動,加入了python編程的大軍。幸運的是,現所在的課題組也更多的使用python進行編程和分析數據,因此也算所學的東西沒有浪費吧。然而,當最近希望發布之前用python寫的可視化項目Multi-omics Visual(推文為《高效繪圖小工具:Multi-omics Visual》)時,卻面臨打包發布較為複雜(相比於其他程式語言)的問題。
  • PyInstaller打包python程序
    用python寫的工具寫好了,想打包然後發給測試同事使用,最後選擇了PyInstaller,支持Windows、Linux、OS X,支持打包成一個文件夾或單個EXE文件。安裝後,把要打包的文件main.py(界面),b.py(邏輯,在main中調用),config.ini(配置文件)複製到F:\pkg在CMD中進入F:\pkg,輸入:pyinstaller main.py然後就在F:\pkg生成build和dist文件夾和一個main.spec配置文件,dist下就是打包好的文件了,運行main.exe,一閃就沒了,在CMD再次運行
  • pyinstaller打包Python文件為exe方法
    1.安裝Pyinstaller通過包管理工具pip下載,類似於RedHat中的yum工具pip install pyinstallerPython 2.7.9 + 或 PythonSuccessefully installed pip-xx.xx.xx 安裝成功2.打包python文件1.進入打包文件所在文件夾,比如
  • Python Pyinstaller-打包程序
    寫了一個腳本要在他的電腦中運行,但是基本很多人沒有安裝python的環境和一些必要的庫,要是一個個安裝的話就很不方便了        所以可以使用pyinstaller來給程序打包,似乎還有其他的一些庫也可以實現,不過還是喜歡用這個,簡單粗暴,不過打包出來的exe確實挺大的,打包一時爽,打開五秒鐘。。。
  • Python|Pyinstaller打包Python程序的過程詳解
    Pyinstaller相比於同類的優勢:1)支持Python2.7, Python 3.3-3.62)生成的可執行文件字節數更小3)對第三方包的支持非常好,只需要將它們放到python的解釋器對應的文件夾中,Pyinstaller便可自動打包到最終生成的可執行文件中。
  • Pyinstaller打包,文件太大了怎麼辦?
    直接用Pyinstaller,打開cmder:pyinstaller -Fw E:\test\url_crawler.py (-F 是打包成一個文件,-w是不出現調試窗口,因為我的小工具裡有GUI,所以不用默認的調試窗口
  • Pyinstaller 打包的兩個小技巧,太實用啦~
    安裝pyinstaller2. 打包初體驗3. 打包進階體驗4. 帶配置文件打包(高級)5. 添加隱式調用庫(高級)1. 安裝pyinstallerPyInstaller是一個用來將Python程序打包成一個獨立可執行文件的第三方包。
  • Python實現貪吃蛇小遊戲!!pyinstaller打包成exe!
    pip install pygame -i http://pypi.douban.com/simple --trusted-host pypi.douban.com利用python的pygame第三方庫和面向對象編程的方法,實現簡單的貪吃蛇小遊戲,還可用pyinstaller打包成exe,方便自己想玩的時候直接點開或者分享給別人
  • 利用pyinstaller打包Python程序為一個可執行文件
    目前(2020)最佳的策略是使用pyinstaller。pyinstaller不僅支持打包整個運行環境到一個可執行文件,而且還支持加密。但唯一的問題是,必須依賴外部的libc.so。兩個問題在pyinstaller中都無法解決,只能規避。因此,pyinstaller仍然無法幫助Python獲得像Golang、Rust那樣完美的打包效果,但也算比較接近了。
  • 乾貨 | pyinstaller打包exe免殺和逆向淺析
    說明:本文python為python3,打包的庫為pyinstaller。本文的測試時間跨度比較長,文中的方法可能早已失效,感謝大家理解。在當前攻防演練中,很多情況下都需要自己動手做一些免殺,在這裡本文就以有手就會的python語言為例,來一起學習下python免殺的那些事。
  • 三個你必須要記住的Pyinstaller打包命令——利用Python實現打包exe
    PS: 如果打包為exe的話,版本儘量選擇python3.6+32位版本,因為win64位系統向下兼容32位程序,但是如果不考慮32位系統的話無所謂,直接python64位版本直接打包就可以,只是只能在win64位系統上跑。
  • 用python打包exe應用程式-PyInstaller
    1、PyInstaller簡介PyInstaller是一個跨平臺的Python應用打包工具,支持 Windows
  • Python打包利器:auto-py-to-exe
    什麼是auto-py-to-exeauto-py-to-exe 是一個用於將Python程序打包成可執行文件的圖形化工具。本文就是主要介紹如何使用 auto-py-to-exe 完成 python 程序打包。
  • 將Python腳本打包成可執行文件
    比較麻煩的是需要針對不同平臺需要打包不同的可執行文件(Windows,Linux,Mac,...)。本文主要就是介紹最後一種方式,.py和.pyc都比較簡單,Python本身就可以搞定。將Python腳本打包成可執行文件有多種方式,本文重點介紹PyInstaller,其它僅作比較和參考。
  • Python學習筆記:打包和發布
    創建獨立應用通過上面介紹的方式打包得到的檔案包中只有當前項目的Python文件,如果Python應用還需要使用第三方模塊和包,那麼僅打包該應用的Python程序是不夠的。為了創建能獨立啟動的應用(自帶依賴模塊和包),需要執行兩步操作。
  • 可視化 Python 打包 exe,絕了!
    什麼是auto-py-to-exeauto-py-to-exe 是一個用於將Python程序打包成可執行文件的圖形化工具。本文就是主要介紹如何使用 auto-py-to-exe 完成 python 程序打包。auto-py-to-exe 基於 pyinstaller ,相比於 pyinstaller ,它多了 GUI 界面,用起來更為簡單方便# 2.
  • 可視化 Python 打包 exe,這個神器絕了!
    什麼是auto-py-to-exeauto-py-to-exe 是一個用於將Python程序打包成可執行文件的圖形化工具。本文就是主要介紹如何使用 auto-py-to-exe 完成 python 程序打包。auto-py-to-exe 基於 pyinstaller ,相比於 pyinstaller ,它多了 GUI 界面,用起來更為簡單方便# 2.
  • 【python學習第七篇】Python 程序打包成 exe 可執行文件
    Python 程序打包工具Python 是一個腳本語言,被解釋器解釋執行。