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

Kit*_*Kit 15 python distutils setuptools package

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

>>> import top_secret_wrapper
Run Code Online (Sandbox Code Playgroud)

它可以很容易地找到top_secret.so而不必设置LD_LIBRARY_PATH?

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

.
??? top_secret_wrapper
?   ??? top_secret.so
?   ??? __init__.py
??? setup.py
Run Code Online (Sandbox Code Playgroud)

在里面__init__.py,我有类似的东西:

import top_secret
Run Code Online (Sandbox Code Playgroud)

这是我的 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,
)
Run Code Online (Sandbox Code Playgroud)

我确定我setup.py缺少一个指定位置的设置top_secret.so,虽然我不知道该怎么做.

Ibo*_*lit 8

我最终做的是:

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

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

import py_my_lib
Run Code Online (Sandbox Code Playgroud)

并不是

from py_my_lib_wrapper import py_my_lib
Run Code Online (Sandbox Code Playgroud)


ren*_*tze 3

如果该库也应该在安装过程中编译,您可以将其描述为扩展模块。如果您只想发送它,请将其添加为package_data