編譯python并分發(fā)二進(jìn)制文件!
明智的想法:
使用Cython, 努特卡, 脫落皮膚或者類似于將python編譯成C代碼,然后將應(yīng)用程序作為python二進(jìn)制庫(kù)(PYD)分發(fā)。
這樣,就不會(huì)留下Python(字節(jié))代碼,我認(rèn)為,您已經(jīng)從普通代碼中得到了任何人(即雇主)所期望的任何合理程度的模糊化。(.NET或Java比這種情況更不安全,因?yàn)樽止?jié)碼沒(méi)有混淆,可以相對(duì)容易地分解為合理的源)。
Cython與CPython的兼容性越來(lái)越強(qiáng),所以我認(rèn)為它應(yīng)該能工作。(我實(shí)際上在考慮這個(gè)作為我們的產(chǎn)品.。我們已經(jīng)在構(gòu)建一些第三方庫(kù),如PYD/dll,所以將我們自己的python代碼作為二進(jìn)制文件發(fā)布對(duì)我們來(lái)說(shuō)并不是太大的一步。)
看見(jiàn)這篇博文(不是我寫的)關(guān)于如何做這件事的教程。(THX@hithwen)
瘋狂的想法:
您可能會(huì)讓Cython為每個(gè)模塊分別存儲(chǔ)C文件,然后將它們?nèi)窟B接起來(lái),并使用大量?jī)?nèi)聯(lián)構(gòu)建它們。這樣,您的Python模塊就相當(dāng)單一,很難用普通的工具進(jìn)行芯片處理。
超越瘋狂:
如果您可以靜態(tài)地鏈接到python運(yùn)行時(shí)和所有庫(kù)(Dll)并進(jìn)行優(yōu)化,您可能能夠構(gòu)建單個(gè)可執(zhí)行文件。這樣,就很難攔截對(duì)python和您使用的任何框架庫(kù)的調(diào)用。但是,如果使用LGPL代碼,則無(wú)法做到這一點(diǎn)。