通过Python模块分发预构建库
我用下面的脚本来分发一个包含纯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位,Python 2.5(是的,这个版本很老。但这是我们的构建机器,需要保持这样以兼容旧版本)
如果有任何建议能帮助我解决这个问题,我会非常感激!
1 个回答
2
很遗憾,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