編譯強檔
把應用程式編譯成原生二進位檔——不出貨明文 Python。預設便攜;加上 --bind-machine 後,授權閘門會自動插入每一個模組,沒有單獨一處檢查可以被找到並刪除。
便捷檔出貨的是「解密一次即可讀取」的 Python 位元碼。magiclock build 更進一步:把你的整個原始碼樹編譯成原生機器碼,並加密你打包進去的模型——完全不出貨任何明文 Python。預設情況下,建置產物是便攜的:可在任何機器上執行,無需帳號、無需啟用。以 --bind-machine 建置時,還會自動為每一個模組插入一次授權閘門檢查,把這個閘門直接編織進編譯後的原生程式碼,並內嵌廠商的公鑰——如此一來沒有單獨一處檢查可以被找到並 patch 掉。
不需要標記任何東西
沒有裝飾器,也不需要為程式碼加任何註解——你的原始碼完全不用改。在 --bind-machine(或 --web-gate)建置下,magiclock build 會走訪從進入點可到達的每一個 .py 模組,在編譯前為每個模組插入一次閘門檢查(核對 python_protect 這項能力)。進入點模組還會自動插入一次 magiclock.bootstrap() 呼叫,不需要你自己寫:
# 你的原始碼,原封不動——不需要裝飾器,也不需要手動加 bootstrap() 呼叫
def export_report(data: str) -> bytes:
return render_pdf(data)magiclock build app.py --bind-machine # 樹裡的每一個模組——包括這個——都會自動被加上閘門閘門檢查每個模組只會執行一次,在行程第一次 import 它的時候執行——這是「每模組一個檢查點」,不是「每次呼叫一個檢查點」(長時間執行的行程下這代表什麼、以及有效期/撤銷的取捨,見安全模型)。
進行編譯
magiclock build app.py # -> dist/app.<...>.so (portable by default — runs anywhere)
magiclock build app.py --bind-machine # machine-locked build with the per-module license gate
magiclock build app.py --standalone # a self-contained app directory instead
magiclock build app.py --no-compile # scan + inject + embed only — skip compiling (no C toolchain needed)
magiclock build app.py --model weights.onnx # also encrypt a model into the build (repeatable)| 旗標 | 預設值 | 意義 |
|---|---|---|
-o, --output-dir | dist | 建置產物的輸出位置。 |
--source-root | 進入點檔案所在位置 | 要掃描/轉換的專案根目錄(當 app.py 不在專案頂層時使用)。 |
--module | — | 編譯成單一檔案的原生擴充模組(預設目標)。 |
--standalone | — | 改為編譯成一個自含式的應用程式目錄,與 --module 互斥。 |
--no-compile | 關閉 | 只做掃描、注入閘門與內嵌資源,跳過實際的原生編譯——適合檢視轉換結果,或建置機器沒有 C 工具鏈時使用。 |
--keep-tmp | 關閉 | 保留中介轉換目錄,不進行清理。 |
--model PATH | 無 | 加密一個模型並打包進建置產物,可重複使用。 |
--model-lock-passphrase | 關閉 | 為打包的模型加上密碼片語作為第二因子(至少需要一個 --model,並須搭配 --bind-machine)。 |
--model-trial / --model-expires-in / --model-expires-at | 無 | 打包模型的有效期——語意與加密程式碼的有效期旗標相同,彼此互斥。 |
--bind-machine | 關閉 | 機器鎖定建置:編譯進授權閘門,二進位檔只能在這台機器已啟用的保險庫下執行;打包的模型加密到本機金鑰。不加它時即為便攜建置(預設——見下文)。 |
--passphrase / --emit-key | 關閉 | 便攜建置專用:為打包的模型加上一道祕密,取代免金鑰預設——--passphrase 從密碼片語衍生模型金鑰;--emit-key 產生並列印一把隨機金鑰。 |
出貨內容
編譯出的 .so/.pyd/自含式目錄,在執行它的機器上不需要安裝 MagicLock、不需要帳號、也不需要連網——解密與授權檢查都是完全離線的(見安全模型)。
預設情況下,建置產物是便攜的:二進位檔可在任何機器上執行,無需帳號、無需保險庫,不編譯進授權閘門,打包的模型預設也是免金鑰的——它們透過編譯進去的執行環境,在任何機器上都能自行解密。此時保護依託的是原生編譯本身(若你選擇了一道模型祕密,則再加上那道祕密:--emit-key 會列印一把可供分發的金鑰,--passphrase 則從密碼片語衍生金鑰,二進位檔透過 magiclock.open_model(path, key=...) 或 passphrase=... 讀取它們)。若再加上 --web-gate,你在出貨後仍保有一個遠端停用開關(見雲端控制)——便攜建置既可自由散布,又能被遠端停下。
以 --bind-machine 建置,則把二進位檔鎖定在建置它的那台機器上:建置時會把一份指明本機席位的簽署聲明烤進產物,執行期閘門拒絕在任何其他機器的保險庫下執行——即使那台機器也已啟用。打包的模型還會額外加密到本機金鑰。如果你需要同一個機器鎖定程式在第二台工作站或部署伺服器上執行,請把那台機器也納入你的帳號並在那台機器上建置。