作者LiloHuang (十年一刻)
看板Python
標題Re: [問題] c調用py產生的exe有辦法包入py檔嗎?
時間Sat Feb 14 19:25:15 2015
步驟一:建立一個 Console-based 的 VC 專案
主程式內容大概如下,不保證完全符合需求或者可以運作
請依照自己的需求進行修改...
#include <Windows.h>
#include <Python.h>
#include <marshal.h>
#include "resource.h"
int main() {
HRSRC res = FindResource(
NULL, MAKEINTRESOURCE(IDR_PYTHON1), TEXT(
"PYTHON"));
if (!res)
return -
1;
HGLOBAL handle = LoadResource(
NULL, res);
if (!handle)
return -
1;
char *ptr = (
char *)LockResource(handle);
size_t size = SizeofResource(
NULL, res);
if (!ptr || size <
8)
return -
1;
Py_Initialize();
PyObject *code_object =
NULL;
PyObject *module =
NULL;
do {
code_object = PyMarshal_ReadObjectFromString(ptr +
8, size -
8);
if (!code_object)
break;
module = PyImport_ExecCodeModule(
"test.pyc", code_object);
if (!module)
break;
if (PyObject_HasAttrString(module,
"foobar")) {
printf(
"great!\n");
}
}
while (
0);
Py_XDECREF(module);
Py_XDECREF(code_object);
Py_Finalize();
return 0;
}
步驟二:產生 .pyc 檔案
編譯 .py 成 .pyc 的方式是 python -m py_compile test.py
步驟三:加入 .pyc 資源檔
透過 VC 資源檔建立新的自訂資源項目,假設命名為 PYTHON
加入資源的方式有點類似此教學,
http://goo.gl/yHFN0R
但是請務必透過 [自訂] 按鈕,而不是選擇已知的資源類型
再把稍早編譯好的 test.pyc 擺到 Resource.rc 同一層目錄後
用記事本打開 Resource.rc 檔案,把新增的自訂資源項目改成
IDR_PYTHON1 PYTHON
"test.pyc"
完成以上動作就可以了,有問題請推文我會盡量回應。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.219.36.61
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1423913118.A.24B.html
※ 編輯: LiloHuang (61.219.36.46), 02/14/2015 23:37:48
推 xtxml: 推分享,最近工作剛好碰到類似的問題,這招很有幫助 02/16 09:57
→ opengood5566: 感謝^^ 10/20 22:51