2011-03-08 72 views
8

我已經使用ctypes編寫了units library的Python綁定。綁定本身只有100行Python。該庫有一個不必要的(用於Python綁定的目的)依賴於tcl,並且如果tcl不存在,配置腳本將失敗。但是,該庫建立與gcc -Wl,-soname,units.so -o units.so -fPIC -shared units.c罰款。Python庫發佈最佳實踐

我現在想釋放這些綁定。有三種方法可以做到這一點。

  1. 使用基本的setup.py自行釋放綁定,併爲文檔中的C庫提供構建,下載和安裝說明。
  2. 釋放綁定以及原始庫源,並提供一個setup.py來處理C庫的編譯和安裝。這對我來說顯然是更多的工作。
  3. 只需發佈.py文件,讓用戶擔心安裝和依賴關係。

如果我選擇選項2,我應該在哪裏放置庫?我應該把它放在與.py文件相同的目錄下,允許我假設lib_name = CDLL('./units.extension'),或者我應該把它放在一個通常位於鏈接器路徑中的目錄中(比如/ lib)?另外,對於Windows機器來說,這通常是如何處理的:a)可能沒有C編譯器,b)沒有標準的放置共享庫的地方?

以下哪個選項是首選項,我應該如何處理Windows病例?

+0

這只是個人意見,但我d只是釋放綁定(並且如果以包的形式發佈它們,只需添加對原始庫的包的依賴)。 – Amber 2011-03-08 20:29:54

回答

2

似乎units庫在5年以上未被修改,所以選項2可能是最好的。其中一個主要的發行版本也不太可能將其打包(例如,我無法在Ubuntu Lucid或Macports中找到它)。

例如,複製units.c和units.h到您的項目,並創建一個setup.py來編譯和您的綁定一起部署:

from setuptools import setup, Extension 

sources = ['src/units.c'] 
ext_opts = {'extra_compile_args': ['-Wl,-soname,units.so', '-Isrc']} 

setup(
    name='units', 
    ext_modules = [Extension('units', sources, **ext_opts)] 
    )