0. 背景
本人最近喜歡上python,剛好又做audio相關的工作,就想用python做一個各種音頻文件生成的小工具。運行效果如下圖。但是想着給同事們都使用一下,但是別人不一定有python環境,就使用pyinstaller打包生成一個exe文件。誰知,exe文件30幾M。驚嚇。一頓搜索之後,開始了各種方案的嘗試,什麼pipenv,anaconda,UPX,mingw等等,一圈下來身心俱疲。柳暗之中突然想到本人電腦上只有一個現成的萬能的微軟巨無霸,我們要擅於站在巨人的肩膀上,瞬間感覺花要開了。結合前面兩天對許多方案的遍歷性嘗試,大致有了思路。
基本原理是: python腳本運行的時候是在cmd命令行下,通過調用python安裝目錄下的python.exe xxx.py命令來的運行的。C++有機制可以調用外部exe可執行程序。既然這樣那麼可以寫一個c++程序,在C++程序裏面調用python.exe來執行腳本。理論完美契合。
1. 準備工作
1.電腦上安裝vs2017或者vs2010等IED環境
2.準備好未經pyinstaller打包的python腳本(或者已經通過pyinstaller -F命令打包成的單個exe文件)
開始行動:
1.在vs2017中創建一個solution名字叫vs2017_win32_prj_sln,然後在這個slution下創建一個新的win32的控制檯應用程序,圖一
1.1 創建完成後如圖二:
1.2 打開圖二中的文件call_python_test.cpp,裏面有一個空的main函數
圖一
圖二
2. 實戰解決方案:
2.0 在main函數中添加如下code。
2.1 其中D:\\Python37\\python.exe是你的python安裝路徑
2.2 其中 E:\\study_python\\pyinstaller_test\\general_2ch_sinwav_file.v1.300.py是你的python腳本所在的位置
2.3 反斜槓2.1 2.2中的表示轉義。不要忽略了。
2.4 開始執行編譯動作。如圖3
2.5 執行完以後會在工程下生成文件,如圖四。看看大小,驚不驚喜? 9K 哦 9K 哦。
2.6 對比pyinstaller打包生成的 30M。驚不驚喜,驚不驚喜,驚不驚喜?
2.7 新生產的文件call_python_test.exe效果如圖五
2.8 如果細心看我po的代碼的話,又善於動手的話,你會發現,直接調用pyinstaller生產的.exe文件也可以。各位不妨嘗試一下。
2.9 程序員的coding歷程從來不會一帆風順,永遠走在解決問題的路上。爲什麼這麼說呢? 請仔細看圖五。是不是發現有點遺憾? 有一個cmd黑色的窗口伴隨這我們的小工具啓動了。怎麼解決呢?
請關注本人第二篇改進型方案 https://blog.csdn.net/qingfengjuechen/article/details/103021189
int main()
{
system("D:\\Python37\\python.exe E:\\study_python\\pyinstaller_test\\general_2ch_sinwav_file.v1.300.py"); //v1, fast
//system("D:\\Python37\\pythonw.exe E:\\study_python\\pyinstaller_test\\general_2ch_sinwav_file.v1.300.py"); //v1.1, fast
//system("D:\\Python37\\general_2ch_sinwav_file.v1.300.exe"); //v2
return 0;
}
圖三
圖四
圖五