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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM