Как запустить интерпретатор Python из virtualenv с помощью pybind11? - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь выполнить интерпретатор python из среды python, называемой env_tensorflow , используя библиотеку pybind11 .

Хотя я включаю и связываю cppфайл в библиотеку pybind11, которая включена из этой среды ( env_tensorflow ), интерпретатор печатает свой двоичный путь как:

/ usr / bin / python3

Однако я ожидаю, что результат будет:

/ home / user / miniconda3 / envs / env_tensorflow / bin / python3

Что я делаю неправильно?Как запустить интерпретатор Python из определенной среды?

main.cpp

#include "/home/user/miniconda3/envs/env_tensorflow/include/python3.6m/Python.h"
#include "/home/user/miniconda3/envs/env_tensorflow/include/python3.6m/pybind11/pybind11.h"
#include "/home/user/miniconda3/envs/env_tensorflow/include/python3.6m/pybind11/embed.h"

namespace py = pybind11;
int main() {
    py::scoped_interpreter guard{};
    py::module sys = py::module::import("sys");
    py::print(sys.attr("executable"));
    //prints: /usr/bin/python3
    //expected print: /home/user/miniconda3/envs/env_tensorflow/bin/python3
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.12)
project(my_proj)
set(CMAKE_CXX_STANDARD 11)

add_library(my_python3.6m SHARED IMPORTED)
set_target_properties(my_python3.6m PROPERTIES
        IMPORTED_LOCATION "/home/user/miniconda3/envs/env_tensorflow/lib/libpython3.6m.so"
        INTERFACE_INCLUDE_DIRECTORIES "/home/user/miniconda3/envs/env_tensorflow/include/python3.6m/"
        )

add_executable(my_proj main.cpp)
target_link_libraries(my_proj my_python3.6m)

1 Ответ

0 голосов
/ 24 сентября 2018

Вам необходимо активировать среду Conda:

source activate env_tensorflow

Как только вы это сделаете, вы сможете запустить cmake, make и ваше приложение с правильным интерпретатором Python.Вам, вероятно, не нужна цель IMPORTED в CMake, вы можете просто ссылаться на python3.6m как обычно, если среда активна во время процесса сборки.

...