[英]How do I import the pybind module I incorporated into my python module?
我創建了一個具有以下結構的 python 模塊(大致基於此示例):
module_name
├── LICENSE
├── README.md
├── module_name
│ ├── __init__.py
│ └── submodule_name
│ ├── __init__.py
│ └── submodule_name.py
├── setup.py
└── src
└── sq.cpp
我可以運行setup.py
並毫無問題地安裝此模塊。 我還可以導入純 python 模塊:
import module_name
import module_name.submodule_name
對於sq.cpp
,我在setup.py
中有以下內容
from pybind11 import get_cmake_dir
from pybind11.setup_helpers import Pybind11Extension, build_ext
ext_modules = [
Pybind11Extension("sq",
["src/sq.cpp"],),
]
sq.cpp
將 pybind 模塊定義為
PYBIND11_MODULE(sq, m)
{
m.doc() = "a function";
m.def("sq", &sq, "a function");
}
在這一點上,我對如何在sq.cpp
中加載模塊感到困惑。 我試過import sq
, import module_name.sq
, import sq.sq
,但都導致ModuleNotFoundError
。 我錯過了什么? 我應該如何導入 pybind 模塊? 我的結構錯了嗎?
由於模塊和函數的名稱相同,您的構建應該會失敗。 (查看sq.cpp
)當您使用PYBIND11_MODULE(sq, m)
定義模塊時, sq
成為局部變量, &sq
將引用另一個對象,而不是sq
函數。 因此,您可以重命名函數的名稱以保持模塊名稱為sq
。
#include <pybind11/pybind11.h>
void _sq() {}
PYBIND11_MODULE(sq, m) {
m.doc() = "a function";
m.def("sq", &_sq, "a function");
}
setup.py
與您的進行比較import sys
from pybind11 import get_cmake_dir
from pybind11.setup_helpers import Pybind11Extension, build_ext
from setuptools import setup
__version__ = "0.0.1"
ext_modules = [
Pybind11Extension("sq",
["src/sq.cpp"],
define_macros=[('VERSION_INFO', __version__)],
),
]
setup(
name="sq",
version=__version__,
ext_modules=ext_modules,
cmdclass={"build_ext": build_ext},
zip_safe=False,
python_requires=">=3.6",
)
重定向到sq
模塊目錄的父目錄,執行如下命令。
python3 -m pip install ./sq
import sq
sq.sq()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.