巧用visual studio(VC++)解決pyinstaller打包的exe文件過大的問題(一)

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;
}

圖三 

 

圖四

圖五

 

 

 

 

發佈了28 篇原創文章 · 獲贊 12 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章