我使用以下脚本分发包含纯 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(既不在站点包中,也不在站点包/mtester 中)。
系统信息:Fedora 10、64 位、python 2.5(是的,它很古老。但它是我们的构建机器,它需要保持这种状态以保持向后兼容性)
任何能帮助我解决这个问题的建议都将不胜感激!
最佳答案
不幸的是,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
关于python - 使用 python 模块分发预构建的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6191942/