簡體   English   中英

如何導入或安裝預構建的python擴展模塊(C ++)(即未通過setuptools編譯的庫)?

[英]How to import or install pre-built python extension module (C++) (i.e. library not compiled via setuptools)?

我有一個C ++項目,正在為其開發Python接口。 現在,我正在使用pybind11,因為它看起來很整潔,並且有一些不錯的工具可用於使用CMake構建擴展模塊,這是構建主要C ++項目的方式。

通過CMake,我設法獲得了一個包含要構建的接口函數的共享庫,但是現在有了它,我不知道如何告訴Python它的存在並使其可導入。 我不想重新配置要通過Python啟動的項目的整個構建(例如, 此處使用setuptools進行描述),因為它是一個很大的項目,而我只是為其部分提供Python接口。 因此,如果我可以為Python和其他C ++代碼一起構建共享庫,然后在稍后運行“ setup.py install”以執行其他任何使共享庫可見的操作,那將是更好的選擇到Python。

這可能嗎? 還是我需要做一些其他的重構,例如使主項目構建其他一些純C ++庫,然后將其鏈接到通過setuptools單獨構建的Python擴展模塊庫中?

如果您只需要安裝一個二進制模塊,則可以為該模塊創建一個簡單的安裝程序。 假設您已經使用cmake生成的構建腳本來構建二進制模塊foo.so (如果在Windows上foo.pyd )。 然后,您可以創建一個簡單的安裝程序安裝腳本:

from setuptools import setup

setup(
    name='foo',
    version='0.1.2.3',
    py_modules=['foo']
)

然后,您需要添加MANIFEST.in文件以選擇二進制模塊文件:

include foo.so

因此,您需要3個文件:

foo.so
MANIFEST.in
setup.py

現在,您可以從Python虛擬環境中進行python setup.py install ,二進制文件也將安裝在其中。 如果要分發模塊,則最好安裝Python wheel軟件包並創建一個.whl文件: python setup.py bdist_wheel 這樣的“輪子”以后可以用pip命令安裝。 請注意,二進制模塊必須安裝在用於構建這些模塊的相同平台和Python版本上。

暫無
暫無

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

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