一、前言
将做好的Python軟體運作在樹莓派上時,不想公開源碼,就需要對檔案進行封裝(或稱打包),本文主要介紹使用pyinstaller封裝Python代碼為可執行程式。
Python是一個腳本語言,被解釋器解釋執行。它的釋出方式:(來自文章david++)
.py檔案:對于開源項目或者源碼沒那麼重要的,直接提供源碼,需要使用者自行安裝Python并且安裝依賴的各種庫。(Python官方的各種安裝包就是這樣做的)
.pyc檔案:有些公司或個人因為機密或者各種原因,不願意源碼被運作者看到,可以使用pyc檔案釋出,pyc檔案是Python解釋器可以識别的二進制碼,故釋出後也是跨平台的,需要使用者安裝相應版本的Python和依賴庫。在樹莓派上運作.py檔案時,有時會自動生成.pyc的檔案,并且該檔案如果作為子產品,可被其他檔案正常引用。
可執行檔案:對于非碼農使用者或者一些小白使用者,你讓他裝個Python同時還要折騰一堆依賴庫,那簡直是個災難。對于此類使用者,最簡單的方式就是提供一個可執行檔案,隻需要把用法告訴Ta即可。比較麻煩的是需要針對不同平台需要打包不同的可執行檔案(Windows,Linux,Mac,...)。
本文主要介紹第三種方式,之前在運作.py或.pyc檔案時,需要在指令行中輸入:python filename.py,通過對.py檔案封裝(不能封裝.pyc檔案),直接用滑鼠輕按兩下生成的檔案,可直接運作代碼。
各種打包工具的對比如下:
SolutionWindowsLinuxOS XPython 3LicenseOne-file modeZipfile importEggspkg_resources support
bbFreeze
yes
yes
yes
no
MIT
no
yes
yes
yes
py2exe
yes
no
no
yes
MIT
yes
yes
no
no
pyInstaller
yes
yes
yes
no
GPL
yes
no
yes
no
cx_Freeze
yes
yes
yes
yes
PSF
no
yes
yes
no
樹莓派的官方推薦系統為Raspbian(基于Debian系統),本文采用pyinstaller工具
二、安裝pyinstaller
方式一:直接使用pip安裝(強烈不推薦,可以安裝成功,但是不能直接運作):
$pip install pyinstaller
方式二:
2.打開終端,cd到下載下傳的壓縮包(例如我直接下到桌面上),解壓檔案:
$cd Desktop
$tar -zxvf PyInstaller-3.4
浏覽了無數部落格,大多到了這一步,就直接開始打包.py檔案,但是在樹莓派上會不斷報錯(報錯内容不記得了,但是生成的兩個檔案夾中的dist内沒有檔案),經過痛苦的找答案過程,終于在官方文檔中找到了答案(文檔連結):
$cd bootloader
$python ./waf distclean all
3.打封包件:
我是用來打包web項目的啟動檔案(項目目錄:/home/pi/Desktop/myproject,啟動檔案為:web_server.py):
$python /home/pi/Desktop/PyInstaller-3.4/pyinstaller.py -F /home/pi/Desktop/myproject/web_server.py
在項目目錄中生成兩個檔案夾及一個web_server.spec檔案,其中在dist檔案夾中有一個可執行檔案。
将此檔案複制到上級目錄(也就是跟web_server,py的同級目錄下),輕按兩下執行即可。
(如運作web的啟動程式報import錯誤,建議采用間接方式啟動,如:建立web_server01.py,代碼為:
importos
os.system('python /home/pi/Desktop/myproject/web_server.pyc')
将該檔案封裝,運作封裝後的檔案,可解決此問題)