【问题标题】:Distributing pre-built libraries with python modules使用 python 模块分发预构建的库
【发布时间】:2011-05-31 18:35:23
【问题描述】:

我使用以下脚本分发一个包含纯 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(是的,它很古老。但它是我们的构建机器,它需要保持这种状态以保持向后兼容性)

任何可以帮助我解决此问题的建议将不胜感激!

【问题讨论】:

    标签: python distutils


    【解决方案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
    

    【讨论】:

    • 啊,这解释了很多事情。我使用的是相对于根目录(setup.py 所在的位置)的路径。非常感谢!
    猜你喜欢
    • 2015-06-06
    • 2012-04-03
    • 2011-05-06
    • 2018-01-17
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多