亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

手動實現把python項目發布為exe可執行程序過程分享

系統 1772 0

1. 手動制作python的exe可執行程序Python沒有內建一個編譯為exe的功能。給python程序的部署帶來不少的麻煩。所以就會出現一些py2exe之類的很不錯的工具,用于自動把.py文件編譯為.exe文件。

最近抽空研究了一下手動實現類似py2exe的功能,希望加強對python的了解。結果還相當不錯。把結果記錄下來,與大家共享。

1.1. 原理文中所描述的方法,基于python的以下幾個功能?

? 1) python程序運行時,會在sys.path指定的路徑中查找庫文件。?
? 2) python從2.3開始,支持從zip文件中import庫(支持.py,.pyc和.pyo,但不支持.pyd)
? 3) python提供C API,讓c語言的程序,可以很方便的調用python的程序

1.2. 實際步驟注:假設python安裝在c:\python25目錄中,最后的可執行文件放到d:\dist目錄中?

? 1) 先去c:\python25\Lib目錄,把所有文件都復制出來,比如復制到d:\pythonlib目錄中
? 2) 開一個cmd窗口,進入d:\pythonlib目錄中,運行 python -OO compileall.py -f . 把lib中的.py文件都編譯成.pyo文件
? 3) 刪除d:\pythonlib目錄中所有的.py和.pyc文件,因為我們只要有.pyo文件就可以讓這些庫運行了。
? 4) 刪除目錄中所有用不著的文件,比如curses,test,idlelib,msilib等,以減少生成文件的體積。
? 5) 把這些庫打包成一個zip文件,比如stdlib.zip,放到d:\dist目錄中
? 6) 把c:\python25\dlls目錄中的.pyd和.dll文件,復制到d:\dist\dlls目錄中,當然,刪除不可能用到的一些文件_msi.pyd,_ssl.pyd等等,可以減少文件的體積
? 7) 把自己寫的程序,也按步驟2至步驟5所說的方法,打成一個mysrc.zip包,放到d:\dist目錄中。 注意:自己寫的程序的入口應該是main.pyo文件
? 8) 用以下C程序編譯出一個可執行文件,比方說叫runpy.exe,也放到d:\dist中。

復制代碼 代碼如下:

#include
#include
#include
#include

int main()
{
?????? // 得到當前可執行文件所在的目錄
?????? char szPath[10240];
?????? char szCmd[10240];
?????? GetModuleFileName(NULL, szPath, sizeof(szPath));
?????? char* p = strrchr(szPath, '\\');
?????? if (p == NULL)
?????? {
??????????? printf("Get module file name error!\n");
??????????? return -1;
?????? }

?????? *p = 0;

?????? // 設定運行時的PATH
?????? sprintf(szCmd, "PATH=%s\\dlls;%%PATH%%", szPath);
?????? _putenv(szCmd);

?????? // 把sys.path設定為['.', '自己的源代碼zip文件', '標準庫zip文件', 'dll目錄']
?????? // 然后調用main模塊
?????? sprintf(szCmd,
??????????? "import sys\n"
??????????? "sys.path=['.', r'%s\\mysrc.zip', r'%s\\stdlib.zip', r'%s\\dlls']\n"
??????????? "import main\n",
??????????? szPath, szPath, szPath);
?????
?????? Py_OptimizeFlag = 2;
?????? Py_NoSiteFlag = 1;
?????? Py_Initialize();
?????? PyRun_SimpleString(szCmd);
?????? return 0;
}

9. 把python25.dll放到d:\dist目錄中。

結束語

這樣來,d:\dist目錄中,一共只有4個文件加一個目錄:
dlls目錄:用于存放所有的dll文件和pyd文件
stdlib.zip文件:用于存放所有的python的.pyo文件格式的標準庫
mysrc.zip文件:用于存放自己寫的程序。注意,自己寫的程序的入口在main.pyo中。
runpy.exe文件:程序的啟動文件,啟動后會設定python的sys.path,然后調用main模塊
python25.dll文件:python的核心dll,runpy.exe依賴于這個dll

--------------------------------------------------------------------------------

哈哈,相當的簡潔明了吧。一共才4個文件一個目錄,5MB都不到哦。
注:當然,這種打包方式第一次做的時候比較麻煩,但之后就可以只要把自己的程序打包就好了,其它的不用變。
而且,如果自己的程序經常做改動的話,自己的程序也可以不打包,直接放到d:\dist中,反正runpy.exe啟動程序的時候,只要能正常運行import main就可以了。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 免费一级欧美大片久久网 | 日本人一级毛片免费视频 | 久久久久在线视频 | 久久福利青草免费精品 | 99j久久精品久久久久久 | 久久性生活视频 | 99久久成人 | 成人性生交大片免费看午夜a | 69成人做爰视频在线观看 | videosex久久麻豆 | 色老头成人免费视频天天综合 | 修修视频在线观看 | 亚洲精品毛片久久久久久久 | 日韩毛片在线影视 | 国产毛片一级 | 久久精品天堂 | 国产福利视频一区 | 精品福利影院 | 国产午夜精品一区二区三区嫩草 | 五月天婷婷免费视频 | 亚洲欧美日韩在线一区二区三区 | 久久婷婷综合在线视频观看6 | 国产成人精品一区二区仙踪林 | 久久草在线观看视频 | 日韩综合色 | 国产在线一区二区三区欧美 | 久热这里只精品99re8久 | aaaa在线观看| 亚洲一区二区中文字5566 | 国产乱码精品一区二区三区卡 | 久草在线观看首页 | 九九九精品在线观看 | 亚洲欧美日韩中文高清一 | 人人干人| 欧美日韩国产在线 | 亚洲成人黄色 | 亚洲另类伦春色综合妖色成人网 | 国产国语一级a毛片高清视频 | 97国产精品视频观看一 | 国产不卡在线 | 天天干天天射综合网 |