Distribute a Python package with a compiled dynamic shared library(分发带有已编译动态共享库的 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 包的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:分发带有已编译动态共享库的 Python 包
- 使用公司代理使Python3.x Slack(松弛客户端) 2022-01-01
- CTR 中的 AES 如何用于 Python 和 PyCrypto? 2022-01-01
- 如何使用PYSPARK从Spark获得批次行 2022-01-01
- 我如何透明地重定向一个Python导入? 2022-01-01
- 我如何卸载 PyTorch? 2022-01-01
- 检查具有纬度和经度的地理点是否在 shapefile 中 2022-01-01
- YouTube API v3 返回截断的观看记录 2022-01-01
- 计算测试数量的Python单元测试 2022-01-01
- 使用 Cython 将 Python 链接到共享库 2022-01-01
- ";find_element_by_name(';name';)";和&QOOT;FIND_ELEMENT(BY NAME,';NAME';)";之间有什么区别? 2022-01-01
