欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

手動實現(xiàn)把python項目發(fā)布為exe可執(zhí)行程序過程分享

 更新時間:2014年10月23日 10:18:25   投稿:junjie  
這篇文章主要介紹了手動實現(xiàn)把python項目發(fā)布為exe可執(zhí)行程序過程分享,本文使用C語言實現(xiàn)了一個簡潔的Python打包程序,需要的朋友可以參考下

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ī)煳募?nbsp;
  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窗口,進(jìn)入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

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

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

相關(guān)文章

  • Python函數(shù)的嵌套詳解

    Python函數(shù)的嵌套詳解

    這篇文章主要為大家介紹了Python函數(shù)的嵌套,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Python實現(xiàn)學(xué)生成績管理系統(tǒng)

    Python實現(xiàn)學(xué)生成績管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Python實現(xiàn)學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Pycharm+Flask零基礎(chǔ)項目搭建入門的實現(xiàn)

    Pycharm+Flask零基礎(chǔ)項目搭建入門的實現(xiàn)

    本文主要介紹了Pycharm+Flask零基礎(chǔ)項目搭建入門的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Php多進(jìn)程實現(xiàn)代碼

    Php多進(jìn)程實現(xiàn)代碼

    這篇文章主要介紹了Php多進(jìn)程實現(xiàn)編程實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • python中print格式化輸出的問題

    python中print格式化輸出的問題

    所謂格式化輸出,就是創(chuàng)建一個可以嵌入變量內(nèi)容的字符串。這篇文章主要介紹了python中print格式化輸出,需要的朋友可以參考下
    2021-04-04
  • python 詳解turtle畫愛心代碼

    python 詳解turtle畫愛心代碼

    這篇文章主要介紹了python畫愛心的過程。文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定的價值,需要的可以參考一下
    2022-02-02
  • Python?tkinter中l(wèi)abel控件動態(tài)改變值問題

    Python?tkinter中l(wèi)abel控件動態(tài)改變值問題

    這篇文章主要介紹了Python?tkinter中l(wèi)abel控件動態(tài)改變值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 利用Python改正excel表格數(shù)據(jù)

    利用Python改正excel表格數(shù)據(jù)

    這篇文章主要介紹了利用Python改正excel表格數(shù)據(jù),運用面向過程寫的,將每一步都放在了不同的函數(shù)中,下文詳細(xì)過程介紹需要的小伙伴可以參考一下
    2022-06-06
  • Series和DataFrame使用簡單入門

    Series和DataFrame使用簡單入門

    這篇文章主要介紹了Series和DataFrame使用簡單入門,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Django Form 實時從數(shù)據(jù)庫中獲取數(shù)據(jù)的操作方法

    Django Form 實時從數(shù)據(jù)庫中獲取數(shù)據(jù)的操作方法

    這篇文章主要介紹了Django Form 實時從數(shù)據(jù)庫中獲取數(shù)據(jù)的相關(guān)知識,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-07-07

最新評論