簡體   English   中英

使用已編譯的動態共享庫分發Python包

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM