【Python】如何发布编写好的Python应用程序之Python Release for Windows(附踩坑经验)
運籌優化博士,只做原創博文。更多關于運籌學,優化理論,數據科學領域的內容,歡迎關注我的知乎賬號:https://www.zhihu.com/people/wen-yu-zhi-37
最近寫了幾個Python的小程序給朋友使用,因為朋友完全就是一個商務運營人員,對編程語言什么的一竅不通,自然我也不可能讓他安裝Python編譯器來運行我的源代碼,并且這個小程序未來也是打算給普通用戶用的,普通用戶自然也沒有Python運行環境。
所以我一開始是想把寫好的Python代碼打包成.exe給他使用,前后折騰了Pyinstaller,Py2exe 發現問題多多,打包后的.exe不是體積巨大就是各種錯誤。偶然間發現了 Python Release for Windows,試用之后發現部署起來方便,靈活度也比較高。因為商務人員的操作系統都是Windows x64的,我們也不需要考慮跨平臺使用,這樣的話 Python Release for Windows 就比 Pyinstaller 和 Py2exe 更實用一些。
那么如果你和我遇到相同的問題,你想把你的Python應用程序在本地部署,如果你想把Python應用程序轉化為.exe方便給沒有Python編譯器的人使用的話,那么本文就是一個很好的替代方案。
1 Python Release for Windows 安裝包下載
在 Python Releases for Windows 找到所需Python版本的 Windows embeddable package 下載。
我選得是Python 3.9.9 下載解壓之后得到 python-3.9.9-embed-amd64 文件夾。這個文件夾里其實就是一個輕量級的免安裝的Python編譯器環境,壓縮文件也就幾十兆吧不算大。這使得我們可以 在Windows平臺下 都可以運行 Python環境。
2 Python環境配置
單單有一個Python編譯器環境還是不行的,因為我們的應用程序基本都需要調用很多包,而現在我們剛下載下來的這個Python編譯器環境還是一片空白的,沒有安裝所需的包。接下來我們要把我們程序所需的包安裝到這個Python編譯器環境中去。其實這個過程和conda里或者正常Python里配置環境的過程基本一致。
2.1 安裝 Pip
新下載的Python編譯器還沒有安裝pip,沒有pip我們安裝別的包就很不方便,所以第一步我們首先安裝pip。
在這個網站里下載 get-pip.py文件:https://bootstrap.pypa.io/get-pip.py,然后將 get-pip.py文件放在解壓后的python-3.9.9-embed-amd64文件中,如下圖所示:
在命令行中輸入:python get-pip.py --no-warn-script-location
如下圖所示即可完成pip的安裝:
安裝完成后還可以在 ./Lib/site-packages 文件夾下看到目前已經安裝過的包,確認pip確實已經安裝了。這個其實和正常的Python和Anaconda里是一樣的。
2.2 安裝其它包
pip包已經安裝成功了,接下來我們可以用pip來安裝其它的包。在命令行中調用如下指令,發現 Lib/site-packages 并不在我們的系統路徑中。
所以接下來我們需要把 Lib/site-packages 路徑添加進來,這樣python才能識別出剛才安裝的pip包。在文件夾下找到 python39._pth 文件并打開,此時打開后的內容為:
然后將該文件修改為如下內容并保存:
對照一下修改了2處內容,1是在第三行添加了… 2是取消了最后一行對import size的注釋。修改后的文件如下所示方便大家復制。
打開命令行,驗證確實Lib/site-packages路徑已經被添加進來了。
接下來就可以用pip安裝你程序所需的包了,如下所示是安裝pandas和numpy記住這里要把你所需的所有的包都要安裝進來才能成功運行的你的代碼。
3 發布程序
我們要發布的python源代碼很簡單,如下所示:
import pandas as pddf = pd.read_excel("./demo_data.xlsx") print(df)我們把如上代碼存在read_excel.py中,并且把它放到python-3.9.9-embed-amd64平級的文件夾中,如下圖所示:
緊接著在命令行中運行 python read_excel.py 即可在命令行中運行該代碼,如下圖所示:
考慮到我們的用戶,可能也不太會使用命令行或者說命令行使用起來比較麻煩,我們進一步寫一個.bat文件將,上面的命令行放入.bat腳本文件中幫我們執行,用戶只需要雙擊運行.bat文件就可以運行代碼了,無需在命令行中輸入指令了。.bat文件內容如下所示:
第一行:cd /d %~dp0 表示切換到當前文件運行的目錄。
第二行:python read_excel.py 表示運行read_excel.py程序。
第三行:cmd.exe 表示啟動命令行。
下圖所示是運行.bat文件得到的結果:
可以看到運行.bat文件也可以和命令行運行相同的結果。
4 踩坑經驗(已安裝Anaconda環境會覆蓋新環境的問題)
到上面為止其實已經完成了python的環境的部署,但是在我自己的電腦上卻發現程序運行報錯,錯誤提示顯示是缺某個python的包,而我已經安裝過了這個包。這個時候我發現由于我安裝了Anaconda所以在命令行中python默認會選擇Anaconda下的python而不會選擇我新部署的python-embed環境,發現這個bug之后,我進行了三個地方的修改:
1 我將 python-embed文件夾下的 python.exe 改名為 python_embed.exe,這么做的目的就是為了區分出python關鍵字,因為python關鍵字已經被Anaconda占用了,所以我通過改名后將兩個python環境區分出來。下次調用python_embed關鍵字就知道是我要啟動新安裝的python環境,而不是啟動Anaconda里的python環境了。
2 將要執行的python程序和python_embed.exe放到同一個文件夾下
3 把start.bat文件夾修改為如下
和之前的start.bat文件比較修改了兩個地方:1是加了一句 cd python-3.9.9-embed,這是因為我們要進入到子文件夾下面才能開始執行,2是把 python main.py 改為 python_embed main.py,這樣就是運行我們要的python環境,而不會調用Anaconda下的python環境。
總結
總得來說我覺得 Python Release for Windows實用性還是蠻高的,Python Release for Windows的優勢有以下幾點:
1 哪怕你的代碼調用了很多包,你只要按照你配置Anaconda或者Python環境的方式一步步就可以把環境配置到 Python Release for Windows 里。不像Pyinstaller 和 Py2exe 經常出現一些莫名其妙的問題,尤其是包調用的多了,也很難找出來問題在哪里。
2 打包后程序體積小便于他人使用,同樣的代碼 我用Pyinstaller 能有1個多G的大小,而Python Release for Windows也就100多M,壓縮之后也就40多M。這么一小的體積就可以包括一個python環境,輕便環保便于發送。
3 Pyinstaller 生成 exe 需要很長時間,生成的過程還經常報錯。相對來說 Python Release for Windows 則不存在此類問題。
參考文獻:
最簡單的方式發布你的Python應用 - 云+社區 - 騰訊云
總結
以上是生活随笔為你收集整理的【Python】如何发布编写好的Python应用程序之Python Release for Windows(附踩坑经验)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Loadrunner如何使用谷歌浏览器录
- 下一篇: 计算机视觉领域的杰出人物,计算机视觉领域