[問題] c調用py產生的exe有辦法包入py檔嗎?

看板Python作者 ( )時間10年前 (2015/02/14 00:53), 10年前編輯推噓4(4012)
留言16則, 2人參與, 最新討論串1/3 (看更多)
c調用python, 通常用PyImport_ImportModule來引入欲調用的py檔案 可是發現產生的exe檔並不會包入這個py檔案, 必須把py檔案和c放一起才能執行 1. 請問有辦法把py檔案也包入exe嗎? 2. 或是 有甚麼其他的方法 把py檔引入 來產生包入py檔的exe呢? 3. 這麼做安全嗎? 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.169.175.179 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1423846418.A.914.html

02/14 13:21, , 1F
假設使用 VC 編譯器,編譯器並不知道 .py 不會一起編譯
02/14 13:21, 1F

02/14 13:22, , 2F
以寫程式的角度來看,第一步得先把 .py 檔編譯成 .pyc
02/14 13:22, 2F

02/14 13:22, , 3F
透過 VC 的資源檔把 .pyc 的檔案一起編譯到 .exe 檔案
02/14 13:22, 3F

02/14 13:22, , 4F
第二步,使用 FindResource LoadResource LockResource
02/14 13:22, 4F

02/14 13:22, , 5F
取出 .pyc 的指標,以及 SizeofResource 取出資源大小
02/14 13:22, 5F

02/14 13:22, , 6F
再用 co = PyMarshal_ReadObjectFromString(p+8, s-8)
02/14 13:22, 6F

02/14 13:23, , 7F
PyImport_ExecCodeModule("<自定義>", co) 來取代
02/14 13:23, 7F

02/14 13:23, , 8F
原先你使用的 PyImport_ImportModule("<自定義>")
02/14 13:23, 8F

02/14 13:23, , 9F
但是以上的方式相當的繁瑣,簡單一點就是用 Bundler
02/14 13:23, 9F

02/14 13:23, , 10F
花錢買好一點的 Bundler,可以不用寫程式把檔案做打包
02/14 13:23, 10F

02/14 13:26, , 11F
如果 .py 檔案有一個以上,自己實作打包會更加的複雜
02/14 13:26, 11F

02/14 13:27, , 12F
以上,提供參考。
02/14 13:27, 12F
※ 編輯: opengood5566 (1.169.175.179), 02/14/2015 18:39:48

02/14 18:48, , 13F
如果是把 .py 編譯成 .pyc 會有一定程度的保護...
02/14 18:48, 13F

02/14 18:49, , 14F
但是不能完全防止逆向工程就是...
02/14 18:49, 14F

02/14 19:11, , 15F
感謝^^
02/14 19:11, 15F

02/14 19:25, , 16F
請看最新的回文,裡面有比較完整的範例...
02/14 19:25, 16F
文章代碼(AID): #1KtYmIaK (Python)
文章代碼(AID): #1KtYmIaK (Python)