標籤:auto 通過 網上 targe run 報錯 eve class 方式
這是我的第01篇部落格Python打包輸出為.exe可執行檔
在完成了之前的爬蟲以後,為了給電腦上沒有Python環境的朋友玩我的爬蟲,開始嘗試把爬蟲的.py檔案輸出成.exe可執行檔。
首先,Python的教程上提到了py2exe的模組。但是一波搜尋以後發現這個玩意只支援到Python3.4,而我用的是Python3.5.2,這讓我很尷尬......於是繼續一波搜尋,發現了一個叫PyInstaller的模組。這個模組可以完美支援Python3.5,於是怒入。
首先是安裝。去sourceforge上費了好大勁下載下來的zip檔案卻死也不知道怎麼安裝....[捂臉] 對於這種沒有exe安裝的東西,英文文檔顯然是懶得去查的,而網上的各路教程通過cmd介面進行操作,還有說解壓完就算安裝好了的,然而就是沒法用......也許我的姿勢不對...
那麼換個方法。到這裡我才發現Windows下也可以像Linux一樣很方便的用命令列安裝程式。如果你的電腦已經安裝好Python,有pip的話,就可以開啟cmd,然後鍵入以下指令:
pip install PyInstaller
然而,如果是國內網,可以無視這一條方法了。必報錯。請在科學上網以後執行這條指令。如果有許可權的報錯,請嘗試用管理員權限運行cmd。
然後就可以非常非常爽快的安裝完這個模組了,而且會自動幫你裝pywin32模組(如果沒有的話),安裝完甚至會提示你的pip可以更新了(如果版本太老的話).....簡直太良心了好嘛.....唯一的缺點就是不搭梯子沒法用。
安裝完以後,就可以用這個模組愉快的把你的py編譯成exe給小夥伴裝逼啦!!hhhhh
然而還沒這麼簡單。編譯有兩種方法:命令列方式和直接Python檔案調用方法。
首先是命令列方式:
在命令列下進入你的py檔案所在目錄(進入別的盤符輸x:,例如d: ;然後cd x:\.....你的目錄)
然後輸入以下指令:(***.py為你要編譯的檔案名稱)
pyinstaller ***.py
然後等待編譯完,在該目錄下會新產生四個東西,一個***.spec檔案(***和你的py檔案同名),一個__pycache__檔案夾,一個dist檔案夾和一個build檔案夾。你要的exe就在dist檔案夾裡。但是,拷給小夥伴的時候記得把整個檔案夾都拷給他們,這一整個檔案夾都是exe的一部分。(其他的都是編譯過程中的中間檔案,輸出完就可以刪掉了)
你一定想,這麼多東西真是麻煩啊,怎麼只輸出一個exe呢?那就要加一個單檔案的參數-F,如下:
(其實可用的參數還有不少,在法二中介紹)
pyinstaller -F ***.py
然後你就會愉快的發現這時候dist下只有一個exe啦哈哈哈可以愉快的裝逼啦wwwww
でも!!還有更方便的方法!
直接Python檔案調用方法:
在Python中直接調用這個模組,會比cmd更方便,至少我是這麼認為的。至少,以後再要輸出只要把這個檔案複製一波,改一兩個參數就可以了,簡直爽啊。
方法如下:
首先,在要編譯的***.py同目錄下建立一個py檔案:TargetPy2exe.py(當然其他隨便xjb一個名字都可以)
然後,在其中寫入以下代碼:
1 #code by STeveHawk2 #Email [email protected]3 4 from PyInstaller.__main__ import run5 if __name__ == ‘__main__‘:6 opts = [‘***.py‘,‘-F‘,r‘--distpath=**‘,r‘--workpath=**‘,r‘--specpath=**‘,r‘--icon=**‘]7 run(opts)
調整完參數運行就可以輸出exe了。
代碼中,opts= 後面的列表裡的就是一系列參數,詳解如下:
第一個***.py就是你要編譯的檔案名稱,必填 [之後的參數全部為選填]
第二個-F就是產生單檔案的參數
第三個--distpath=**意思是dist檔案夾(最後輸出檔案所在地)的路徑,**為路徑,比如D:\My Programs\Python\輸出\dist,預設為目前的目錄下的dist檔案夾內
第四個--workpath=**意思是build檔案夾(臨時檔案)的路徑,**為路徑,比如D:\My Programs\Python\輸出\build,預設為目前的目錄下的build檔案夾內
第五個--specpath=**意思是***.spec檔案(臨時檔案)的路徑,**為路徑,比如D:\My Programs\Python\輸出\,預設為目前的目錄
第六個--icon=**意思是輸出的exe檔案的表徵圖路徑,**為路徑,比如D:\My Programs\Python\icon.ico
對於表徵圖,最好到一個叫png2ico的網站上線上產生你所需的ico表徵圖檔案,注意,直接把一個jpg圖片檔案改尾碼成.ico會報錯 [我一開始就是刷小聰明在這上面耗了好久才發現問題的....(捂臉)]。在png2ico上轉換圖片的時候,大小記得點auto,這樣產生的ico檔案會內建四種大小的表徵圖以供系統縮放的需求。
注意,我在後四個參數的引號前面都加上了r,這是因為不加r會出現各種問題,例如反斜線導致的逸出字元搗亂,以及有些中文目錄名裡的中文會變成16進位的utf-8碼來顯示導致路徑錯誤。在這些字串前加上r(raw)以表示原始字串就能解決這些問題了。
32 & 64位的問題
另外,關於輸出exe檔案的32位和64位的問題。這個問題的起因是我的電腦上安裝了64位的Python環境,然後用pyinstaller輸出的exe檔案就是64位的了。然而小夥伴的電腦是32位的,於是妥妥的沒法運行了。這就讓我很尷尬了.....沒法好好裝逼了不是...於是怎麼輸出32位的exe呢?其實很簡單,你的Python環境是32位的,輸出的exe就會是32位的,64位的就會輸出64位的。如果你想既輸出32位的,又輸出64位的,以下是方法:
首先分別安裝32位和64位的Python環境,並分別安裝pyinstaller。切記,安裝完一個環境就要立馬用pip install pyinstaller安裝pyinstaller。如果已經裝完了兩個環境再安裝pyinstaller,會有一個環境安裝成功,但是再次運行會提示已經安裝,另一個環境會無法成功安裝。成功給兩個環境裝好pyinstaller了以後,如果用cmd命令列的方式調用會出現問題,至少我的電腦上會有這個問題。目前我還不清楚怎麼在cmd下分別調用兩個環境。這時候Python檔案調用的方法就會方便很多。以我使用的pycharm為例,顯然要編譯的***.py和TargetPy2exe.py是在同一個工程下的。這時,在File選項卡下,開啟Setting選項,在Setting視窗左側欄中找到Project:***(***為工程名)選項,點擊左側灰色三角開啟下拉式功能表,裡面點擊Project Interpreter選項,然後在右側視窗裡上面的下拉式功能表裡選擇所需的32位或者64位解譯器。選好以後點擊下面的OK即可。第一次可能需要等待一會才能運行。然後運行TargetPy2exe.py就可以產生你要的32/64位的exe啦!!
不過這隻是對於我這種強迫症類型的人適用的方法。如果嫌煩,只需要裝一個32位的Python環境就可以了,因為64位系統下可以相容32位的程式.....這是最簡單的解決辦法。
以上。
【01】Python打包輸出為.exe可執行檔