2014-04-04 69 views
4

我想使用distutils構建一個靜態Cython庫。我不關心它是一個可以導入的真正的Python擴展模塊。我只想編譯代碼並將這些對象放入一個靜態庫中。創建動態庫的代碼非常簡單,我可以使用distutils創建靜態Cython庫嗎?

from distutils.core import setup 
from distutils.extension import Extension 
from Cython.Distutils import build_ext 

setup(
    cmdclass = {'build_ext':build_ext}, 
    ext_modules = [Extension("test",["test.pyx"])] 
) 

是否有一種簡單的方法可以使其變爲靜態?

+0

你將如何從Python中導入庫,如果它是靜態的?你想靜態鏈接你的Python解釋器嗎? – hivert

+0

我不需要從Python導入庫。這被用來從C程序中調用Python代碼。我的程序將與libpython動態鏈接。 – marius

回答

1

Distutils非常有限,沒有爲靜態構建設置。我建議你使用別的東西來編譯你的項目的靜態庫部分。

如果您的用例是從其他C代碼調用Cython代碼,那麼您希望在您的Cython代碼中使用public or api declarations以及cdef聲明的函數和變量。 Cython將允許從外部C代碼調用如此聲明的對象,並且它將爲您生成一個.h文件以及.c文件。

0

據透露,這個工程使用numpy distutils,但顯然是隔靴搔癢簡單或可能是一個共享庫的原代碼的可移植性,

from Cython.Compiler.Main import compile 
from numpy.distutils.misc_util import Configuration 

compile('test.pyx') 
config = Configuration(...) 
config.add_installed_library('test', 
         ['test.c'], 
         'test', 
         {'include_dirs':[get_python_inc()]}) 
相關問題