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

标签 python package setuptools distutils

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

>>> import top_secret_wrapper

不用设置LD_LIBRARY_PATH就能轻松找到top_secret.so?

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

.
├── 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 位置的设置,但我不确定该怎么做。

最佳答案

我最后做的是:

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

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

import py_my_lib

不是

from py_my_lib_wrapper import py_my_lib

关于python - 使用已编译的动态共享库分发 Python 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37316177/

相关文章:

python - 根据在特定列中找到的值删除行

python - 对经过身份验证的用户使用 Cookie

python - 为什么我必须将这个 import 语句写两次?

emacs - 如何获取Package安装的插件版本?

python - sdist/bdist_wheel 在 Linux 中不包含 pyc,但在 Windows 中包含

python - 在 Pyomo 中,是否可以根据多个表达式编写目标函数或约束?

javascript - Google-App-Engine channel API : Server doesn't send message to client

python - R reticulate 从 Github 安装 python 库

python - setup.py - 在 setuptools 中的包内添加数据文件

python - 使用命令名称/选项直接调用 distutils 或 setuptools 的 setup() 函数,而不解析命令行?