繁体   English   中英

CMake FindPython3无法在Windows上找到解释器

[英]CMake FindPython3 failing to find interpreter on Windows

这是我正在使用的CMakeLists.txt文件的开始:

cmake_minimum_required(VERSION 3.12)
project(hello-pyext)

find_package(Python3 COMPONENTS Interpreter Development)
message(STATUS
    "Python: version=${Python3_VERSION} interpreter=${Python3_EXECUTABLE}")
if(NOT Python3_FOUND AND Python3_Development_FOUND)
    #   find_package() will not abort the build if anything's missing.
    string(JOIN "\n" errmsg
        "  Python3 and/or development libs not found."
        "  - Python3_FOUND=${Python3_FOUND}"
        "  - Python3_Development_FOUND=${Python3_Development_FOUND}"
        )
    message(FATAL_ERROR ${errmsg})
endif()

cmake-3.12.4-Linux-x86_64使用cmake-3.12.4-Linux-x86_64 (可从cmake.org下载) cmake.org时,它可以正常工作,找到通过apt-get安装的Python3解释器和开发标头/库。 (系统上也安装了Python2,但我已经确认它找到的解释器是Python3。)

但是,在Windows 10上,它将找到开发标头/库,但找不到解释器,并打印:

-- Selecting Windows SDK version 10.0.17763.0 to target Windows 10.0.14393.
-- Could NOT find Python3 (missing: Python3_EXECUTABLE Interpreter) (found version "3.6.6")
-- Python: version=3.6.6 interpreter=Python3_EXECUTABLE-NOTFOUND
CMake Error at hello-pyext/CMakeLists.txt:14 (message):
    Python3 and/or development libs not found.
    - Python3_FOUND=FALSE
    - Python3_Development_FOUND=TRUE

在MinGW Bash和VS 2017的开发人员命令提示符中,使用以下所有版本的CMake,我都得到相同的结果:

  • Visual Studio 2017附带的cmake version 3.12.18081601-MSVC_2
  • cmake.org下载的cmake-3.13.4-win64-x64 cmake.org cmake-3.13.4-win64-x64
  • cmake.org下载的cmake-3.14.0-rc3-win64-x64
  • cmake.org下载的cmake-3.14.20190305-gc9ce4f-win64-x64 (此编辑的最新开发版本)

我记得最好,我只使用过python.org的标准安装程序来安装Python。 “程序和功能”列出了已安装的Python 3.4.4(64位),Python 3.6.6(64位)和Python Launcher。 py启动器可以正确启动这两个程序,以及python本身在我的路径中:

C:\>py --version
Python 3.6.6
C:\>py -3.4 --version
Python 3.4.4
C:\>python --version
Python 3.6.6
C:\>python3 --version
'python3' is not recognized as an internal or external command,
operable program or batch file.
C:\>

我还对照一位开发人员的机器进行了检查,该机器通过Anaconda安装Python 3.5作为他的主要Python,并从python.org安装了3.6,并获得了相同的结果。

不推荐使用的FindPythonInterp似乎可以正常工作:

find_package(PythonInterp)
message("
    PYTHONINTERP_FOUND=${PYTHONINTERP_FOUND}
    PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}
    PYTHON_VERSION_STRING=${PYTHON_VERSION_STRING}
")
-- Found PythonInterp: C:/Program Files/Python36/python.exe (found version "3.6.6")

    PYTHONINTERP_FOUND=TRUE
    PYTHON_EXECUTABLE=C:/Program Files/Python36/python.exe
    PYTHON_VERSION_STRING=3.6.6

我对Windows不太熟悉,所以我不确定从哪里可以调试它。 有谁知道为什么FindPython3无法找到解释器,或者我应该如何开始调试它(除了阅读FindPython3的源代码FindPython3 )?

根据[CMake问题19024( https://gitlab.kitware.com/cmake/cmake/issues/19024 ),此处的问题是我正在执行32位构建(默认设置,因为未配置在仅安装64位Python的系统上使用-A x64 )。 FindPython3认为它已经找到了32位开发工具(尽管还没有找到),意识到它找不到32位解释器,因此将Python3_FOUND=False设置Python3_FOUND=False

通过使用-A x64配置进行64位构建可以解决该问题。

“发现不存在的32位开发工具”问题(导致其在上面的问题中打印Python3_Development_FOUND=TRUE )是FindPython3模块中的一个错误,该错误已由MR 3103修复,可在每晚的20190316版本中获得。 不幸的是,这并没有使它进入3.14.0版本。

作为参考,在成功运行FindPython3之后,您想要做的就是构建扩展:

Python3_add_library(myext MODULE myextsrc)
target_link_libraries(myext other_target_on_which_it_depends)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM