使用已编译的动态共享库分发Python包

时间:2016-05-19 07:06:39

标签: python package setuptools distutils

如何将Python模块与预编译的.so库一起打包?具体来说,我如何编写setup.py以便在Python中执行此操作时

>>> import top_secret_wrapper

无需设置top_secret.so即可轻松找到LD_LIBRARY_PATH

在我的模块开发环境中,我有以下文件结构:

.
├── top_secret_wrapper
│   ├── top_secret.so
│   └── __init__.py
└── setup.py

__init__.py内,我有类似的内容:

import top_secret

这是我的setup.py

from setuptools import setup, Extension

setup(
    name = 'top_secret_wrapper',
    version = '0.1',
    description = 'A Python wrapper for a top secret algorithm',
    url = None,
    author = 'James Bond',
    author_email = 'James.Bond.007@mi6.org',
    license = 'Spy Game License',
    zip_safe = True,
)

我确定我的setup.py缺少我指定top_secret.so位置的设置,但我不知道该怎么做。

3 个答案:

答案 0 :(得分:2)

如果在安装期间也应该编译该库,则可以将其描述为extension module。如果您只想发货,请将其添加为package_data

答案 1 :(得分:1)

setupscript.html#installing-package-data中所述:

setup(
    ...
    package_data={'top_secret_wrapper': ['top_secret.so']},
)

答案 2 :(得分:1)

我最终做的是:

setup(
    name='py_my_lib',
    version=version,  # specified elsewhere
    packages=[''],
    package_dir={'': '.'},
    package_data={'': ['py_my_lib.so']},
)

这样我就可以通过名称导入lib,并且没有其他级别的嵌套:

import py_my_lib

而不是

from py_my_lib_wrapper import py_my_lib