????????python文件如何打包成.exe程序,這個過程可謂是一波三折,因為是第一次嘗試打包文件,所以了解的并不是太多,所以在網上各種搜索資料,最后發現打包需要第三方工具,基本上用的是py2exe 和pyinstaller.然而py2exe只支持2.7及以下版本,因為我下載的是3以上的版本,所以直接選擇了pyinstaller。
這里要感謝這個人寫的博客,因為我是參考這個步驟來安裝的https://blog.csdn.net/douzhenwen/article/details/78886244
下面說說我的個人電腦安裝pyinstaller步驟以及遇到的問題吧。
1.找到Python3文件下的scrips文件中的pip安裝,找到這個路徑C:\Users\admin\AppData\Local\Programs\Python\Python37-32\Scripts\pip.exe
2.然后拖拽到命令窗口(Windows鍵+R鍵,輸入cmd)
3.在C:\Users\admin\AppData\Local\Programs\Python\Python37-32\Scripts\pip.exe后面加install pyinstaller
即:C:\Users\admin\AppData\Local\Programs\Python\Python37-32\Scripts\pip.exe install pyinstaller回車鍵安裝就可以了
4.安裝好了之后命令窗口顯示pip已經有新的版本19.0.3,而我當前的版本是18.1,建議安裝新的版本,于是乎就按照提示安裝了新的版本。在命令窗口輸入:Python -m pip install --upgrade pip即可
上面是根據我自己電腦上的文件安裝路徑安裝的pyinstaller。
但是安裝過程并不是那么順利,接下來說一下我安裝過程中遇到的問題吧。
問題1.安裝好pyinstaller,如何去使用pyinstaller打包呢?
先在環境變量中添加Python的地址,添加之后按照打包方式輸入:
C:\admin\AppData\Local\Programs\python\python37-32\Scripts>pyinstaller -F guess.py
但是顯示如下:C:\admin\AppData\Local\Programs\python\python37-32\Scripts不是內部或外部命令,也不是可運行程序或批處理文件
而且我已經把guess.py的文件(我的一個要打包的代碼名稱)和pyinstaller的文件放在同一目錄下,之后繼續搜索,發現Python3.7打包的方式是在cmd中輸入:C:\admin\AppData\Local\Programs\python\python37-32\Scripts\pyinstaller.exe>pyinstaller -F G:\python_work\guess.py(G:\python_work\guess.py是要打包的文件地址)
結果成功了,真的是很高興,然后排查,我把環境變量里面的路徑刪了,之后發現一樣成功,所以就是和路徑沒有關系,那就是輸入方式的問題,應該加上pyinstaller.exe,而且要打包的程序不一定要放在同一目錄下,只要輸入要打包程序的路徑就可以了,而且打包的文件存儲在C:Users\admin\dist中
試著運行.exe的文件,結果成功了,唯一美中不足的是運行成功之后界面就閃退了,我是想讓運行成功之后界面繼續停留,然后繼續尋找答案,發現在代碼的最后加上兩行代碼:
import? os
os.system('pause')
問題2.當我加上以上兩行代碼的時候,我用中文注釋了,但是中文注釋的代碼不能打包,并顯示UnicodeDecodeError
網上找了很多答案,大部分是說文件名把中文改成英文,但是并不是我要的答案,我想知道代碼如何在有中文的情況下打包成.exe的文件,本來都準備在Stack Overflow上面求助的,之后問了問大師兄,一起交流討論,原來問題不在打包上面,而是在代碼本身,(我用的是Geany編輯器)
解決辦法:在Geany編輯器中:文檔->設置文件編碼->Unicode(UTF-8),結果成功,而且打包帶中文的代碼也成功了。
附帶一些Python小知識:
Python的四種類型的指令:
1.表達式是由操作符連接的值。如2+2,'hello'+''+' world',當表達式跟在if和while后面,可稱之為條件
2.賦值語句把值存儲到變量中,以便在隨后的程序中能夠使用這個值
3.if,while,break語句都是流程控制語句,可導致執行跳過指令,循環執行指令或者跳出循環。
4.print()函數和input()函數。
打包參數:
-F, –onefile 打包一個單個文件,如果你的代碼都寫在一個.py文件的話,可以用這個,如果是多個.py文件就別用
-D, –onedir 打包多個文件,在dist中生成很多依賴文件,適合以框架形式編寫工具代碼,我個人比較推薦這樣,代碼易于維護
-K, –tk ? ? ? ? 在部署時包含 TCL/TK
-a, –ascii 不包含編碼.在支持Unicode的python版本上默認包含所有的編碼.
-d, –debug 產生debug版本的可執行文件
-w,–windowed,–noconsole 使用Windows子系統執行.當程序啟動的時候不會打開命令行(只對Windows有效)
-c,–nowindowed,–console 使用控制臺子系統執行(默認)(只對Windows有效)pyinstaller -c? xxxx.py? pyinstaller xxxx.py --console
-s,–strip 可執行文件和共享庫將run through strip.注意Cygwin的strip往往使普通的win32 Dll無法使用.
-X, –upx 如果有UPX安裝(執行Configure.py時檢測),會壓縮執行文件(Windows系統中的DLL也會)(參見note)
-o DIR, –out=DIR 指定spec文件的生成目錄,如果沒有指定,而且當前目錄是PyInstaller的根目錄,會自動創建一個用于輸出(spec和生成的可執行文件)的目錄.如果沒有指定,而當前目錄不是PyInstaller的根目錄,則會輸出到當前的目錄下.
-p DIR, –path=DIR 設置導入路徑(和使用PYTHONPATH效果相似).可以用路徑分割符(Windows使用分號,Linux使用冒號)分割,指定多個目錄.也可以使用多個-p參數來設置多個導入路徑,讓pyinstaller自己去找程序需要的資源
–icon=<FILE.ICO> 將file.ico添加為可執行文件的資源(只對Windows系統有效),改變程序的圖標? pyinstaller -i? ico路徑 xxxxx.py
–icon=<FILE.EXE,N> 將file.exe的第n個圖標添加為可執行文件的資源(只對Windows系統有效)
-v FILE, –version=FILE 將verfile作為可執行文件的版本資源(只對Windows系統有效)
-n NAME, –name=NAME 可選的項目(產生的spec的)名字.如果省略,第一個腳本的主文件名將作為spec的名字