簡體   English   中英

將python編譯為共享庫

[英]Compiling python into a shared library

我有一堆python代碼,我想“編譯”到一個帶有C接口的共享庫,該接口可以與其他C / c ++程序鏈接並且可以工作而不依賴於太多其他庫(可能是python和其他一些dll但是它們都應該包含在最終的lib目錄中。

我真的不想將python代碼重寫為C ++。 我當然可以,但最好有一個可以像dll / so lib一樣使用的獨立庫。

我已經嘗試過cython並希望將python編譯成C然后只是將C代碼編譯成一個dll,但這似乎還沒有完成(我還沒能使它完美地工作)。 然后我也嘗試了bbfreeze - 但bbfreeze是否支持創建.so文件? 無法找到如何做到這一點。 有人知道嗎?

你知道其他任何更直接的選擇嗎? python代碼只需要編譯一次。 最重要的是,如果它創建一個單獨的.so文件,無論它有多大,只是在沒有太多依賴項的情況下工作。

您可以在C ++應用程序中使用Python作為庫:它稱為Python / C API

這個想法是你初始化自己的解釋器,然后在其中加載一個腳本。 您可以通過Python解釋器中的全局變量或模塊公開C ++對象,以便您的代碼與之交互,您可以直接從C ++代碼運行Python函數。

現在,我知道您可能希望將Python腳本嵌入共享庫中:使用傳統的GNU工具鏈,這不一定是一件容易的事。 多種技術可以實現這一點,但沒有一種是正式的,而且只是將腳本放在外部文件中,所有這些技術看起來都太復雜了。

如果您的目標是隱藏最終用戶的腳本,您可以使用私鑰對其進行簽名或加密,並將公鑰嵌入您的庫中,但請記住,任何有足夠動機的人都可以輕松檢索密鑰。 。

Python更多地設置為以相反的方式工作:您的代碼是從Python調用的,整體邏輯在Python中,而特定於問題(和性能關鍵代碼)是用C / C ++編寫的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM