我正在尝试为我的小模块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
)
谢谢!
答案 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
)