python的編譯有多種好處,其中主要有提高運行速度、代碼保密
方式1:編譯成pyc檔案(二進位的檔案)
速度有所提高。我的一個代碼從150s變成了130s。 操作方法:開啟cmd,進入py檔案的目錄,輸入下面命令
python3 -m py檔案名稱
python3 -O -m py_compile py檔案名稱 #這個也可以
完成後,目前的目錄下會出現一個__pycache__檔案夾,編譯後的二進位檔案pyc就在裡面
方式2:編譯成exe檔案
一、首先安裝 pyinstaller
命令:
pip3 install pyinstaller
二、安裝完成後,開始使用。進入要編譯的py檔案所在目錄
pyinstaller ./py檔案名稱 #效果是有一堆的檔案在dist檔案夾下
如果要編譯成一個檔案:
pyinstaller --console --onefile ./py檔案名稱 #在dist檔案夾下只產生一個exe檔案。
初次運行,可能會出現 failed to create process,這是pip3的bug,路徑的空格不能正常識別
解決:
進入C:\Program Files\python\3.5\Scripts,可以看到有一個pyinstaller-script.py和pyinstaller.exe
文字編輯器開啟pyinstaller-script.py.第一行的代碼申明是這樣的
#!c:\program files\python\3.5\python3.exe
加一個引號變成:#!"c:\program files\python\3.5\python3.exe"
重新運行編譯命令,即可。
從運行速度上看,.exe和.pyc一樣。但都大於py檔案。exe檔案的相容性更好把,.pyc需要電腦安裝有編譯時間相同的python版本。(.pyc的產生速度很快)
問題解答:
1.編譯成pyc,還會出現.沒有_path_屬性的錯誤
"Error while finding spec for 'fibo.py' (: 'module' object has no attribute 'path')"
這是因為編譯時間,不應該使用
python3 -m kill2next.py #kill2next是檔案名稱
.py表示該模組(py)在包kill2next當中
正確方法:
python3 -m kill2next #不要帶尾碼
2.exe編譯失敗:
UnicodeDecodeError:"gbk" codec can't decode byte 0xaa in position 160:illegal multibyte sequence
解決:
檔案名稱改成英文