将pybind11嵌入虚拟环境

时间:2018-11-26 11:26:55

标签: python c++ pybind11

我正在尝试使用pybind11将python嵌入我的C ++应用程序中。使用以下CMake属性,我设法在项目的虚拟环境中进行编译。

-DPYTHON_EXECUTABLE:FILEPATH=C:/Python/Envs/myproject/Scripts/python.exe

运行应用程序时,出现错误(如下),没有特定错误。但是我认为它无法加载正在加载的numpy模块。

  

abort()已被调用

#include <iostream>
#include <pybind11/embed.h>

namespace py = pybind11;

int main() {
    py::scoped_interpreter guard{};
    auto sys = py::module::import("sys");
    py::print("Hello, World from Python!");
    py::print(sys.attr("executable"));
    py::print(sys.attr("version"));
    // works until here

    auto np = py::module::import("numpy");
    py::print(np.attr("version"));

    return EXIT_SUCCESS;
}

如果仅导入sys模块(位于标准库中),则该应用程序可以正常运行。这是直到崩溃的应用程序的输出:

Hello, World from Python!
C:\Develop\sandbox\python_binding\cmake-build-debug\bin\python_binding.exe
3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)]

我已将以下目录添加到PATH。

  

PATH = C:\ Python \ Envs \ project \ Scripts; C:\ Python \ Envs \ project \ Lib

我是否必须指定我正在使用的python解释器其他部分的路径,或者这可能是由另一个问题引起的?

1 个答案:

答案 0 :(得分:1)

我必须将PYTHONPATH设置为站点包

// conversion
val myCaseClassObjects: Seq[MyCaseClass] = lines.map(removeDollars).map(parseLine)

代替reflection

相关问题