如何将库编译添加到numpy.distutils.core?

时间:2013-09-09 17:29:19

标签: python numpy setup.py

我正在尝试为我的小模块make setup.py,它使用numpy。要编译这个模块,我需要额外的库,它位于同一目录

ls -l audiotools 
total 20
-rw-rw-r-- 1 rth rth 4405 Sep  9 10:58 audiotools.c
drwxr-xr-x 6 rth rth 4096 Sep  9 11:13 libresample-0.1.3
-rw-rw-r-- 1 rth rth  741 Sep  9 11:56 setup.py

所以我需要在setup.py中添加一些东西,它将在libresample-0.1.3中调用configure和make,然后将'libresample.a'添加到链接器命令。

我尝试过使用add_library,但它只需要源文件,但不需要整个源目录。我怎么能这样做?

这不起作用。

def configuration(parent_package='', top_path=None):
        import numpy
        from numpy.distutils.misc_util import Configuration

        config = Configuration('audiotools',parent_package,top_path)
        config.add_extension('audiotools', ['audiotools.c'])
        config.add_library('libresample',['libresample.a'])
        return config

if __name__ == "__main__":
        from numpy.distutils.core import setup
        setup(
                name = "audiotools",
                version='0.01',
                description='Python wrapper for GNU libresample-0.1.3 and reader of Wave 24bit files',
                author='Ruben Tikidji-Hamburyan, Timur Pinin',
                author_email='rth@nisms.krinc.ru, timpin@rambler.ru',
                configuration=configuration
        )

谢谢!

2 个答案:

答案 0 :(得分:1)

据我所知,这是一件非常麻烦的事。通常的方法是基本上要求将lib作为共享库安装在系统上。

pyzmq 对此做了某种尝试,但它不是一件小事: https://github.com/zeromq/pyzmq/blob/master/setup.py

答案 1 :(得分:0)

我发现最简单的方法是使用os.system。但这对我来说并不好看。

def configuration(parent_package='', top_path=None):
        import numpy
        from numpy.distutils.misc_util import Configuration

        config = Configuration('audiotools',parent_package,top_path)
        config.add_extension('audiotools', ['audiotools.c'],
                extra_link_args=[os.getcwd()+'/libresample-0.1.3/libresample.a'], 
                depends=['libresample-0.1.3/libresample.a'],

        return config

if __name__ == "__main__":
        import os
        os.system('pushd libresample-0.1.3 && ./configure CFLAGS=-fPIC && make &&popd')
        from numpy.distutils.core import setup
        setup(
                name = "audiotools",
                version='0.01',
                description='Python wrapper for GNU libresample-0.1.3 and reader Wave 24 files',
                author='Ruben Tikidji-Hamburyan, Timur Pinin',
                author_email='rth@nisms.krinc.ru, timpin@rambler.ru',
                configuration=configuration
        )