尝试从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?