1. 程式人生 > >win10環境下利用pyinstaller把python代碼(.py)打包成可執行文件(.exe)

win10環境下利用pyinstaller把python代碼(.py)打包成可執行文件(.exe)

有一個 就是 win pos 3.4 -i html 技術 -a

前言

最近寫了一個小小的檢測程序,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圖標
所以可以用參數-F 讓生成一個文件,輸入:pyinstaller -F work1.py 這個文件就可以發給你的朋友們,打開後愉快的happy(裝b)啦!。。

win10環境下利用pyinstaller把python代碼(.py)打包成可執行文件(.exe)