我試圖從一個大的C++共享庫(libbig.so)中獲取一些函數並通過Cython將它們暴露給Python。爲此,我已經有了一個C++文件(small.cpp),它以我需要的共享庫的功能提供了一個薄的包裝器,以便通過Cython(pysmall.pyx)調用。使用Cython擴展模塊分發共享庫和一些C代碼
libbig.so - > small.cpp,small.h - > libsmall.so - > pysmall.pyx - > pysmall.cpp - > pysmall.so
我可以建立並運行此擴展模塊我自己的計算機:我只是將small.cpp編譯到libsmall.so中,然後在setup.py的Extension對象中聲明「libraries = ['small']」來構建擴展模塊pysmall.so。
我現在試圖分發這個擴展模塊,並且我很難追蹤描述分發Cython模塊以及C源代碼和共享庫的setup.py最佳實踐的資源。我已閱讀「Installing Python Modules」,「Distributing Python Modules」和「Distributing Cython Modules」。我瞭解如何自行分發擴展模塊。我不太確定分發擴展模塊的依賴關係的最佳方式。
Cython文檔指出,您應該包括生成的.cpp文件以及.pyx文件,以防Cython不存在,但它不提供代碼來演示如何最好地處理每種情況。它也沒有提到如何分發Cython模塊所依賴的共享庫。
我正在從pandas,lxml,pyzmq,h5py等等的setup.py腳本中進行挖掘,並且發生了一些額外的工作。如果任何人有指針或示例代碼可能會加速這一過程,我當然會很感激!
請注意,在更新的'setuptools'和'distutils'版本中(我使用'setuptools' 5.7),這些命令被移入它們自己的模塊中。所以你會想''setuptools.command.build_ext import build_ext'或者'distutils'分別執行。 – Midnighter
您的第一個setup.py文件是在Cython.Distutils沒有安裝它的機會之前導入它。 – zneak
另一種選擇是創建一個conda包,它可以捆綁在'libbig.so'中。 https://conda.io/docs/user-guide/tutorials/build-postgis.html – oLas