python是腳本語言,若是你在開發機器上執行固然會很方便,但是若是你幫他人寫了個腳本,想在他人機器上運行,可能會遇到點困難。html
爲了讓腳本在他人機器上順利執行,你首先要幫他安裝python解釋器,若是你import了一些庫好比pandas,那這個也須要安裝,甚至相關的依賴也須要安裝。這個時間成本顯然是很大的,這部分工做也很枯燥,甚至會影響工做積極性,所以花一點時間,學會如何將python腳本打包爲.exe文件,無需再安裝各類開發環境和依賴庫,是一件一勞永逸的事情。python
如今,主流的工具備Pyinstaller、cz_Freeze、py2exe,本文只介紹Pyinstaller的使用。windows
1.開發環境和工具:工具
Pyinstaller能夠支持Python 2.7 和3.4—3.7。*
2.要打包的文件myscript.py源碼:ui
import pandas as pd df = pd.read_excel('D:/account.xls') result = dr.dropna() result.to_excel('D:/result.xls')
該源碼包含pandas, xlrd, xlwt等庫
3.在windows上安裝Pyinstaller.net
pip list
pip install pypiwin32
pip install pyinstaller
pyinstaller myscript.py
該命令執行後, pyinstaller會分析myscript.py文件,而且在腳本script.py所在文件夾中:命令行
- 生成myscripy.spec
- 建立文件夾build
- 在build文件夾中生成日誌文件和運行所需文件
- 建立dist文件夾
- 在dist文件夾中建立可執行文件夾myscript,在myscript文件夾中,就能夠找到myscript.exe可執行文件
pyinstaller -F myscript.py
pyinstaller -F -w myscript.py
打包過程當中不免會遇到問題,通常都會遇到缺乏模塊的問題,好比,在對myscript.py打包時會報錯ModuleNotFoundError
,缺乏xlrd, xlwt等模塊,通常來講能夠按照下面三個步驟進行解決:
1.Pyinstalled會從本地的環境路徑下找須要的模塊,例如python的包都放在site-packages目錄下,所以,Pyinstalled能夠直接從該目錄下獲取須要的模塊。若是本地也缺乏該模塊,先經過pip命令安裝。例如:日誌
pip install xlrd pip install xlwt
2.若是你須要的模塊不在site-packages,而在你指定的目錄下,那打包時你能夠經過-P DIR
參數指定,其中DIR爲你須要的模塊路徑:excel
pyinstaller -F -w -p DIR myscript.py
-p命令容許指定多個模塊路徑,能夠用:
分隔,或者屢次使用這個參數,像這樣:pyinstaller -p DIR1:DIR2:DIR3 myscript.py
或pyinstaller -p DIR1 -p DIR2 -p DIR3 myscripy.py
3.有時候並非找不到模塊,而是代碼中有些模塊是隱含導入的,這樣的話就須要指出這些模塊,才能正確的打包,能夠在命令行打包時使用參數--hidden-import MODULENAME
指定模塊名,或者能夠在打包後生成的myscript.spec文件中修改,該文件中有個參數hiddenimports=[]
配置爲:code
hiddenimports=['cython','sklearn','sklearn.ensemble','sklearn.tree._utils','scipy._lib.messagestream']
而後再運行如下命令
pyinstaller myscript.spec
到此本片文章結束。
若是遇到什麼問題,歡迎你們和我交流。若有不對之處,還望指正。
參考: