【01】Python打包輸出為.exe可執行檔

來源:互聯網
上載者:User

標籤: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可執行檔

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.