分发带有已编译动态共享库的 Python 包

Distribute a Python package with a compiled dynamic shared library(分发带有已编译动态共享库的 Python 包)
本文介绍了分发带有已编译动态共享库的 Python 包的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

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

How do I package a Python module together with a precompiled .so library? Specifically, how do I write setup.py so that when I do this in Python

>>> import top_secret_wrapper

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

It can easily find top_secret.so without having to set LD_LIBRARY_PATH?

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

In my module development environment, I have the following file structure:

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

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

Inside __init__.py, I have something like:

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 位置的设置,但我不确定如何执行此操作.

I'm sure my setup.py is lacking a setting where I specify the location of top_secret.so, though I'm not sure how to do that.

推荐答案

我最终做的是:

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

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

This way I get to import the lib by its name, and don't have another level of nestedness:

import py_my_lib

而不是

from py_my_lib_wrapper import py_my_lib

这篇关于分发带有已编译动态共享库的 Python 包的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

groupby multiple coords along a single dimension in xarray(在xarray中按单个维度的多个坐标分组)
Group by and Sum in Pandas without losing columns(Pandas中的GROUP BY AND SUM不丢失列)
Group by + New Column + Grab value former row based on conditionals(GROUP BY+新列+基于条件的前一行抓取值)
Groupby and interpolate in Pandas(PANDA中的Groupby算法和插值算法)
Pandas - Group Rows based on a column and replace NaN with non-null values(PANAS-基于列对行进行分组,并将NaN替换为非空值)
Grouping pandas DataFrame by 10 minute intervals(按10分钟间隔对 pandas 数据帧进行分组)