win10環境下利用pyinstaller把python代碼(.py)打包成可執行文件(.exe)
前言
最近寫了一個小小的檢測程序,python寫起來只需要短短一百行,可是打包起來就沒有C那麽容易了。下面記錄一下我艱難的“打包”過程。
方法一:py2exe
py2exe是一種經典的方法,為什麽說他經典呢?因為這玩意取了個這麽好聽的名字,但是只支持到python3.4,你這讓我們這種緊跟時代潮流的弄潮兒怎麽打包?
好吧,放棄。
方法二:pyinstaller
這是一個看起來比較靠譜的方法,只需要用pip安裝,然後在命令窗裏面一通操作就可以了。在這裏,我參考了另一位老哥的博客(http://blog.csdn.net/mrlevo520/article/details/51840217)
不管那麽多,我直接三下五除二,開始了pip,打開Anaconda Prompt,輸入”pip install pyinstaller“
我是采用Anaconda安裝的python3,所以自然用的是Anaconda Prompt,這裏大家應該沒有什麽疑問吧 :)。
結果令人惋惜:
PermissionError: [WinError 32] 另一個程序正在使用此文件,進程無法訪問。
無奈的我只好上網尋求幫助,在這位同學的博客(http://blog.csdn.net/qq_33530388/article/details/68933201)找到了解決方法,原來是編碼的問題。雖然py3統一用utf-8了。但win下的終端顯示用的還是gbk編碼。
解決方法如下:
從你的python文件夾裏找到pip下的compat文件夾,我的在F:\python\Anaconda3\Lib\site-packages\pip\compat 沒錯就是這裏,有一個__init__.py文件,打開它,執行以下操作: return s.decode(‘utf_8‘) 改為return s.decode(‘cp936‘)
OK,結束後再次嘗試,看看能不能解決。。
PermissionError: [WinError 32] 另一個程序正在使用此文件,進程無法訪問。好吧,還是不行。。。
不過功夫不負有心人,終於在另一個博客那裏(http://blog.csdn.net/create115721/article/details/79238696),我找到了解決方法:
將剛才那個__init__.py文件中所有‘utf-8‘改為‘gbk‘。如此便解決了編碼的問題。
安裝完畢,接下來開始打包。
有和我一樣忘了在windows的CMD中操作的同學請自覺復習(http://www.cnblogs.com/kekec/p/3662125.html),我這裏就是直接進入F盤,輸入“F:”,然後不停的cd到我的代碼所在的文件夾。
最後執行命令:pyinstaller work1.py
結果:
這樣就算是大功告成了吧,進入該目錄下的dist文件夾打開看看,運行.exe文件,和下圖一樣沒問題。可是。。我們還漏了一個重要的細節。
因為我們沒有加參數,所以pyinstaller打包成散包。具體參數如下:
參數 | 定義 |
-F | 指定打包後只生成一個exe格式的文件 |
-D | –onedir 創建一個目錄,包含exe文件,但會依賴很多文件(默認選項) |
-c | –console, –nowindowed 使用控制臺,無界面(默認) |
-w | –windowed, –noconsole 使用窗口,無控制臺 |
-p | 添加搜索路徑,讓其找到對應的庫。 |
-i | 改變生成程序的icon圖標 |
win10環境下利用pyinstaller把python代碼(.py)打包成可執行文件(.exe)