久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

馬哥小伙伴教你把python項目發(fā)布為exe可執(zhí)行程序的步驟的兩個方法

今天馬哥教育的小伙伴在Python運維開發(fā)群內(nèi)問《Python 如何生成可執(zhí)行程序?》,今天小編特地花了些時間來整理,希望幫助小伙伴解決這個問題:

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

最近抽空研究了一下手動實現(xiàn)類似py2exe的功能,希望加強對Python的了解。結(jié)果還相當(dāng)不錯。把結(jié)果記錄下來,與大家共享。

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

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

1.2. 實際步驟注:假設(shè)Python安裝在c:\Python25目錄中,最后的可執(zhí)行文件放到d:\dist目錄中

1) 先去c:\Python25\Lib目錄,把所有文件都復(fù)制出來,比如復(fù)制到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文件,復(fù)制到d:\dist\dlls目錄中,當(dāng)然,刪除不可能用到的一些文件_msi.pyd,_ssl.pyd等等,可以減少文件的體積
7) 把自己寫的程序,也按步驟2至步驟5所說的方法,打成一個mysrc.zip包,放到d:\dist目錄中。 注意:自己寫的程序的入口應(yīng)該是main.pyo文件
8) 用以下C程序編譯出一個可執(zhí)行文件,比方說叫runpy.exe,也放到d:\dist中。

復(fù)制代碼代碼如下:
#include <Python.h>
#include <Windows.h>
#include <stdlib.h>
#include <stdio.h>int main()
{
// 得到當(dāng)前可執(zhí)行文件所在的目錄
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;
// 設(shè)定運行時的PATH
sprintf(szCmd, "PATH=%s\\dlls;%%PATH%%", szPath);
_putenv(szCmd);

// 把sys.path設(shè)定為['.', '自己的源代碼zip文件', '標(biāo)準(zhǔn)庫zip文件', 'dll目錄']
// 然后調(diào)用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目錄中。

結(jié)束語

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

 


第二種方法:

最近我在剛?cè)胧諴ython,其中就學(xué)到了怎樣將Python的py格式文件轉(zhuǎn)化為windows的exe執(zhí)行程序,

是這樣的,首先要創(chuàng)建一個py文件,這里給截圖吧

馬哥小伙伴教你把python項目發(fā)布為exe可執(zhí)行程序的步驟的兩個方法

接下來就以這個Python文件為例創(chuàng)建一個find_day.exe文件。

首先,我們要去http://www.py2exe.org下載py2exe,

馬哥小伙伴教你把python項目發(fā)布為exe可執(zhí)行程序的步驟的兩個方法

 

這里點擊Downloade py2exe from SourceForge,

馬哥小伙伴教你把python項目發(fā)布為exe可執(zhí)行程序的步驟的兩個方法

這里,我們點擊下載win32-py2.7.exe進行下載,之后安裝,安裝目錄為Python的所在目錄。

現(xiàn)在創(chuàng)建setup文件,

馬哥小伙伴教你把python項目發(fā)布為exe可執(zhí)行程序的步驟的兩個方法

,將setup.py和find_day.py都放在Python的安裝目錄下,現(xiàn)在進入shell中,

馬哥小伙伴教你把python項目發(fā)布為exe可執(zhí)行程序的步驟的兩個方法

 

,運行完之后,你會在Python安裝目錄下的dist文件夾里找到find_day.exe文件。

馬哥小伙伴教你把python項目發(fā)布為exe可執(zhí)行程序的步驟的兩個方法

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

哈哈,相當(dāng)?shù)暮啙嵜髁税伞R还膊?個文件一個目錄,5MB都不到哦。
注:當(dāng)然,這種打包方式第一次做的時候比較麻煩,但之后就可以只要把自己的程序打包就好了,其它的不用變。
而且,如果自己的程序經(jīng)常做改動的話,自己的程序也可以不打包,直接放到d:\dist中,反正runpy.exe啟動程序的時候,只要能正常運行import main就可以了。

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計算運維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機構(gòu)!

    1. 主站蜘蛛池模板: 布拖县| 隆回县| 嘉黎县| 额尔古纳市| 惠来县| 若羌县| 柳州市| 石棉县| 搜索| 改则县| 城固县| 苍梧县| 大埔县| 天津市| 偃师市| 清河县| 始兴县| 金山区| 永顺县| 墨脱县| 金湖县| 连城县| 茌平县| 宁陵县| 遂昌县| 洪洞县| 科尔| 西畴县| 冷水江市| 淳安县| 民和| 庆元县| 班玛县| 益阳市| 南城县| 苍梧县| 攀枝花市| 修文县| 广宁县| 监利县| 永丰县|