[英]How do I package for distribution a python module that uses a shared library?
我正在為C庫編寫一些綁定,並且不確定如何配置所有這些以進行分發,因此可以pip install
我的包。
假設我有以下文件:
library.c
library.h
wrapper.py
為了使我的包裝器庫工作,有必要:
library.h
上運行ctypesgen
以生成ctypes代碼 以下是命令:
gcc -Wall -fPIC -c library.c
gcc -shared -Wl,-soname,liblibrary.so.1 -o liblibrary.so.1.0 library.o
ctypesgen.py library.h -L ./ -l library -o _library.py
運行setup.py
還取決於安裝了ctypesgen
的用戶。
我不知道如何設置這一切,以便對圖書館感興趣的人可以簡單地點擊pip install library
並自動完成所有這些。 有人能幫忙嗎?
您需要的是setuptools / distutils的Extensions功能。
文檔有更多的信息 ,簡而言之,一個示例setup.py來做上面的內容將如下所示
from setuptools import setup, find_packages, Extension
extensions = [Extension("my_package.ext_library",
["src/library.c"],
depends=["src/library.h"],
include_dirs=["src"],
),
]
setup(<..>,
ext_modules=extensions,
)
構建模塊時, .so
由setup.py
自動生成。 如果需要鏈接到其他庫,可以向擴展提供libraries
參數列表。 有關詳細信息,請參閱docs( 1 )。
由於它是在setuptools的功能中構建的,因此它可以與pip
並且可以在pypi上分發(僅作為源代碼)。 Extension
引用的所有源文件必須存在於分布式pypi存檔中。
如果你想構建可分發的二進制輪子,包括本機代碼, 請參閱manylinux 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.