如何将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
位置的设置,但我不知道该怎么做。
答案 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