假設有人想要打包依賴於C++ boost庫的Python(Cython)庫。Python包裝:作爲依賴的提升庫
什麼是配置setup.py
的最佳方法,以便用戶能夠正確獲知需要安裝boost庫(即,在Ubuntu等中的apt-get install libboost-dev
在其他操作系統中)?或者將boost庫包含在python包發行版中是一種更好的做法嗎?
假設有人想要打包依賴於C++ boost庫的Python(Cython)庫。Python包裝:作爲依賴的提升庫
什麼是配置setup.py
的最佳方法,以便用戶能夠正確獲知需要安裝boost庫(即,在Ubuntu等中的apt-get install libboost-dev
在其他操作系統中)?或者將boost庫包含在python包發行版中是一種更好的做法嗎?
的問題是更好地問,
什麼是分發Python擴展,包括 外部庫的依賴關係的最佳途徑。
這更好地處理二進制輪包。
用戶不需要知道任何關於setup.py
的信息,該信息用於構建和安裝源代碼。用戶只需要下載並安裝二進制輪包。
只包含頭文件並不能解決需要庫構建和鏈接的問題。它也帶來了版本不兼容的問題。
所以setup.py
不需要任何特別的關於這些,它只是需要知道在哪裏可以找到標題,這將是你的項目中的子目錄,如果包含庫和鏈接的庫。
該文檔應該包括如何從源代碼構建的說明,不僅僅需要提升(python頭文件,適當的編譯器等)。
像auditwheel之類的工具會將外部庫依賴關係捆綁到二進制輪子中,因此最終用戶不需要安裝庫來使用您的包。
另請參閱manylinux分發二進制Python擴展和this demo project。
我不確定是否有一個很好的方法來在運行時檢測到這一點。也許嘗試編譯一個簡單的測試程序,使用boost,看看編譯失敗? – ngoldbaum
@ngoldbaum我已經這樣做了。問題更多的是像boost這樣的外部依賴的最佳實踐。簡而言之,您是否將boost庫包含在包中(僅包含頭文件),或者在安裝python包期間向用戶報告錯誤。 – Zouzias
我同意Danny的回答。如果沒有可用的輪子,那麼如果所需的外部庫不可用,則應該在setup.py中輸出一個有用的錯誤消息。 – ngoldbaum