在C ++中使用Python 3.6时导入错误

时间:2018-03-12 04:09:54

标签: cmake

尝试从C ++程序调用python脚本时出现以下错误

Traceback (most recent call last):
File "./../resources/im-to-text.py", line 1, in <module>
    from PIL import Image
ImportError: No module named PIL

PIL / pillow安装在我的系统上,我可以直接运行Python脚本而不会出现问题。问题似乎是Python的版本,CMake包含的库与我的Windows机器上使用的主要版本有一些区别,因此PIL不适合脚本使用。我选择使用单独的Python组件进行图像处理,因为我觉得使用PIL比使用libpng要好得多,所以我更喜欢使用单独的Python组件而不是仅仅在C ++中使用它的建议。运行它的我的C ++代码是

#include <iostream>

using namespace std;

int main() {
    cout << "LOADING IMAGE" << endl;

    //Use python to parse the image
    string dataSource = "simple";
    string command = R"(python ./../resources/im-to-text.py )";
    command += dataSource;
    system(command.c_str());

    //Unrelated code here

    command = R"(python ./../resources/text-to-im.py )";
    command += dataSource;
    system(command.c_str());

    cout << "DONE" << endl;
    return 0;
}

我的CMakeLists文件目前是

cmake_minimum_required(VERSION 3.8)
project(picture_maze_solver)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES src/main.cpp src/GraphNode.cpp src/GraphNode.h src/GraphEdge.cpp src/GraphEdge.h src/FileParser.cpp src/FileParser.h)
set(Python_ADDITIONAL_VERSIONS 3.6)
set(PYTHON_EXECUTABLE C:\\Users\\MY_USERNAME\\AppData\\Local\\Programs\\Python\\Python36\\python.exe)
find_package( PythonInterp 3.6 REQUIRED )
set(PYTHON_LIBRARY C:\\Users\\MY_USERNAME\\AppData\\Local\\Programs\\Python\\Python36\\libs\\python36.lib)
find_package(PythonLibs 3.6 REQUIRED)
include_directories ( ${PYTHON_INCLUDE_DIRS} )
add_executable(picture_maze_solver ${SOURCE_FILES})

它似乎与StackOverflow帖子here有关,但我不确定从Python 2到Python 3的跳转会如何影响这个,我找不到任何{{1的文件我的Python文件夹中的文件扩展名。此外,建议添加.so调用的修复程序没有改变我的构建的任何内容,但我可能做错了,因为我找不到和dlopen文件引用。有没有办法迫使CMake使用基于Windows文件路径的Python版本,以便它可以找到PIL?

0 个答案:

没有答案