[英]Distribute a Python package with a compiled dynamic shared library
如何將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
的位置,雖然我不知道該怎么做。
我最終做的是:
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
如果在安裝期間也應該編譯該庫,則可以將其描述為擴展模塊 。 如果您只想發貨,請將其添加為package_data
如setupscript.html #instaling-package-data中所述 :
setup(
...
package_data={'top_secret_wrapper': ['top_secret.so']},
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.