使用python模块分发预构建的库

时间:2011-05-31 18:35:24

标签: python distutils

我使用以下脚本来分发包含纯python代码的模块。

from distutils.core import setup, Extension
import os
setup (name = 'mtester',
       version = '0.1',
       description = 'Python wrapper for libmtester',
       packages=['mtester'],
       package_dir={'mtester':'module'},
       )

我遇到的问题是,我修改了一个使用外部库(.so文件)的文件,我需要将其与现有模块一起发布。我被建议使用package_data来包含库。我将脚本修改为以下内容。

from distutils.core import setup, Extension
import os
data_dir = os.path.abspath('../lib64/')
setup (name = 'mtester',
       version = '0.1',
       description = 'Python wrapper for libmtester',
       packages=['mtester'],
       package_dir={'mtester':'module'},
       package_data={'mtester':[data_dir+'mhelper.so']},
       )

问题是,添加package_data没有任何区别。这不是在任何位置安装mhelper.so(既不在site-packages中也不在site-packages / mtester中)。

系统信息:Fedora 10,64 bit,python 2.5(是的,它很古老。但它是我们的构建机器,它需要保持这种方式以保持向后兼容性)

任何有助于我解决此问题的建议都将受到赞赏!

1 个答案:

答案 0 :(得分:1)

不幸的是package_data查找相对于包顶部的文件。一个解决方法是使用其余代码移动模块目录下的帮助程序库:

% mv lib64/mhelper.so module/

然后相应地修改package_data参数:

package_data = {'mtester': ['mhelper.so']}
...

然后测试:

% python setup.py bdist
% tar tf dist/mtester-0.1.linux-x86_64.tar.gz | grep mhelper
./usr/local/lib/python2.5/dist-packages/mtester/mhelper.so