簡體   English   中英

如何打包分發使用共享庫的python模塊?

[英]How do I package for distribution a python module that uses a shared library?

我正在為C庫編寫一些綁定,並且不確定如何配置所有這些以進行分發,因此可以pip install我的包。

假設我有以下文件:

  • library.c
  • library.h
  • wrapper.py

為了使我的包裝器庫工作,有必要:

  • 編譯library.c並創建一個共享庫
  • 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,
)

構建模塊時, .sosetup.py自動生成。 如果需要鏈接到其他庫,可以向擴展提供libraries參數列表。 有關詳細信息,請參閱docs( 1 )。

由於它是在setuptools的功能中構建的,因此它可以與pip並且可以在pypi上分發(僅作為源代碼)。 Extension引用的所有源文件必須存在於分布式pypi存檔中。

如果你想構建可分發的二進制輪子,包括本機代碼, 請參閱manylinux

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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