【问题标题】:Embedding pybind11 with virtual environment使用虚拟环境嵌入 pybind11
【发布时间】:2019-04-28 00:57:00
【问题描述】:

我正在尝试使用 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 解释器的其他部分的路径,或者这可能是由另一个问题引起的?

【问题讨论】:

  • 您是否为您的 venv 正确指定了 PYTHONPATH?
  • 我必须将 PYTHONPATH 设置为 site-packages set PYTHONPATH=C:\Python\Envs\project\Lib\site-packages

标签: python c++ pybind11


【解决方案1】:

我必须将 PYTHONPATH 设置为站点包

set PYTHONPATH=C:\Python\Envs\project\Lib\site-packages

而不是C:/Python/Envs/project/

【讨论】:

    猜你喜欢
    • 2019-11-16
    • 2012-02-18
    • 2022-01-14
    • 1970-01-01
    • 2019-09-24
    • 2021-07-23
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    相关资源
    最近更新 更多