1. 程式人生 > 其它 >【Python打包成exe方法】——已解決匯入第三方包無法打包的問題

【Python打包成exe方法】——已解決匯入第三方包無法打包的問題

  1. 前言

在我們寫程式碼的過程中,我們開發的指令碼一般都會用到一些第三方包,可能別人也需要用到我們的指令碼,如果我們將我們的xx.py檔案發給他,他是不能直接用的,他還需要安裝python直譯器,甚至還要安裝我們用的那些第三方包,是不是有點小麻煩?但是我們都知道,PC是可以直接執行exe檔案的,這就為我們提供了一個便捷的方式。所以,從看了這個教程以後,這都將成為過去式,打成exe之後,分享即可用。

 

PS: 如果打包為exe的話,版本儘量選擇python3.6+32位版本,因為win64位系統向下相容32位程式,但是如果不考慮32位系統的話無所謂,直接python64位版本直接打包就可以,只是只能在win64位系統上跑。

 

 

下面正式開始將一下怎麼開始打包python程式碼(我用的是Anaconda3 64位的+pycharm)

 

 

 

  1. 安裝pyinstaler

首先安裝pyinstaller,使用安裝命令:pip3 install pyinstaller,如下圖所示。

 

 

  1. pyinstaler打包機制

我們寫的python指令碼是不能脫離python直譯器單獨執行的,所以在打包的時候,至少會將python直譯器和指令碼一起打包,同樣,為了打包的exe能正常執行,會把我們所有安裝的第三方包一併打包到exe。

 

即使我們的專案只使用的一個requests包,但是可能我們還安裝了其他n個包,但是他不管,因為包和包只有依賴關係的。比如我們只裝了一個requests包,但是requests包會順帶裝了一些其他依賴的小包,所以為了安全,只能將所有第三方包+python直譯器一起打包。如下圖所示。

 

藍色表示是安裝requests依賴的包

 

  1. Pyinstaler打包exe

1. 我們來將自己寫好的.py的檔案打包成一個exe,我們直接cmd切換到這個指令碼的目錄,執行命令:pyinstaller -F  setup.py,如下圖所示:

[ps:可以直接在含有.py檔案的目錄下地址框輸入cmd回車開啟dos視窗,輸入pyinstaller -F setup.py   注意,-F兩邊是有空格的。Setup.py是我的檔名,到時候替換成自己的即可。]

 

ps: -F引數表示覆蓋打包,這樣在打包時,不管我們打包幾次,都是最新的,這個記住就行,固定命令。

 

2. 執行完畢之後,會生成幾個資料夾,如下圖所示。

 

 

3.在dist資料夾下,就有了一個exe程式,這個就是可執行的exe程式,如下圖所示。

 

 

雙擊這個.exe檔案即可執行。

 

 

 

 

  1. 解決python打包生成的exe檔案執行時提示缺少模組問題

事情原委:當時我用pyinstaller -F D:\pythonProject\Opencv__3\02__A.py打包了一個exe程式,但是執行時提示我缺少cv2模組然後我就去查pyinstaller的使用方法,找到pyinstaller有一個-p引數,使用這個-p引數可以指定多個打包路徑,因此可以利用-p引數來同時指定好工程檔案路徑和需要一起打包的cv2模組路徑:

  • 注:檢視包所在目錄方法:
  1. 使用win + R鍵開啟執行欄,輸入cmd+回車,在dos視窗內輸入      pip list 回車即顯示安裝了多少包:

 

 

  1. 使用pip安裝完包後,只需再執行一次命令pip install xx,就會顯示安裝路徑。如:pip install jupyter安裝完成後,再次輸入pip install jupyter就會顯示此包已經安裝的路徑了

 

 

可以看出:

Jupyter安裝在C:\Users\xin\AppData\Local\Programs\Python\Python35\Lib\site-packages下面,記住這個路徑

則在打包時輸入 pyinstaller -F -p xx;yy.py

【xx即為剛才包的路徑,yy.py為要打包的工程檔案】

 

然後打包成功,雙擊開啟看看發現可以運行了。(*^▽^*)