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

标签 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(既不在站点包中,也不在站点包/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/

相关文章:

python - pip 下载而不执行 setup.py

Python distutils 没有使用正确版本的 gcc

python - 覆盖 Python bdist Windows 安装程序的默认安装目录

python - Pandas 根据拆分另一列添加新列

python - 使用 distutils 制作适合 zipimport 的包

python - 如何使用简单的预卸载脚本扩展 distutils?

python - 比带条件的 iterrows 更快的方法(每行的前驱和后继)

python - 在同一行多次打印字符串

python - 使用多个条件从 numpy 数组中有效选择元素

python - 运行 Spark 时遇到 "WARN ProcfsMetricsGetter: Exception when trying to compute pagesize"错误