首页 > 解决方案 > python的cmake execute_process抛出“权限被拒绝”错误

问题描述

我正在尝试使用 cmake 在 macOS 上构建一个 C++ 项目。该项目有点复杂,但在大多数情况下,它似乎正在编译,直到它得到一个名为FindPythonLibsNew.cmake. 该呼叫 execute_process在以下呼叫中返回“权限被拒绝”

(要查看整个 FindPythonLibsNew.cmake,请访问此链接。它与我们项目中的完全相同的文件

execute_process(COMMAND "${PYTHON_EXECUTABLE}" "-c"
    "from distutils import sysconfig as s;import sys;import struct;
print('.'.join(str(v) for v in sys.version_info));
print(sys.prefix);
print(s.get_python_inc(plat_specific=True));
print(s.get_python_lib(plat_specific=True));
print(s.get_config_var('SO'));
print(hasattr(sys, 'gettotalrefcount')+0);
print(struct.calcsize('@P'));
print(s.get_config_var('LDVERSION') or s.get_config_var('VERSION'));
print(s.get_config_var('LIBDIR') or '');
print(s.get_config_var('MULTIARCH') or '');
"
    RESULT_VARIABLE _PYTHON_SUCCESS
    OUTPUT_VARIABLE _PYTHON_VALUES
    ERROR_VARIABLE _PYTHON_ERROR_VALUE)

以下是输出

-- Found PythonInterp: /usr/local/Cellar/python/3.7.4 (Required is at least version "3") 
CMake Error at /Users/Developer/Development/cppProject/cmake/FindPythonLibsNew.cmake:96 (message):
  Python config failure:

Call Stack (most recent call first):
  /usr/local/share/cmake/pybind11/pybind11Tools.cmake:16 (find_package)
  /usr/local/share/cmake/pybind11/pybind11Config.cmake:100 (include)
  /Users/Developer/Development/cppProject/python_test/CMakeLists.txt:8 (find_package)

${PYTHON_EXECUTABLE}路径设置为/usr/local/Cellar/python/3.7.4

如果我尝试print通过 python3 运行语句,它们会按预期执行,所以问题必须在于 cmake 如何尝试执行 python 命令。不幸的是,我不知道足够多的 cmake 来完全理解它是如何或从哪里执行的。

任何帮助是极大的赞赏。

标签: pythoncmake

解决方案


事实证明,这FindPythonLibsNew.cmake是为PYTHON_EXECUTABLE. 我通过添加-DPYTHON_EXECUTABLE:FILEPATH=/usr/local/Cellar/python/3.7.4/bin/python3到 cmake 命令纠正了这个问题。我确信有更好、更清洁的方法来解决这个问题,但目前这对我有用。


推荐阅读