Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake FindPython3在Windows上找不到解释器_Python_Windows_Cmake_Visual Studio 2017 - Fatal编程技术网

CMake FindPython3在Windows上找不到解释器

CMake FindPython3在Windows上找不到解释器,python,windows,cmake,visual-studio-2017,Python,Windows,Cmake,Visual Studio 2017,下面是我正在使用的CMakeLists.txt文件的开头: 在Linux上使用cmake-3.12.4-Linux-x86_64(从cmake.org下载)构建时,它运行良好,可以通过apt get找到Python3解释器和安装的开发头/库。(系统上也安装了Python2,但我已经确认它找到的解释器是python3。) 但是,在Windows 10上,它会找到开发头/lib,而不是解释器,打印: ——选择Windows SDK版本10.0.17763.0以Windows 10.0.14393为

下面是我正在使用的
CMakeLists.txt
文件的开头:

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

但是,在Windows 10上,它会找到开发头/lib,而不是解释器,打印:

——选择Windows SDK版本10.0.17763.0以Windows 10.0.14393为目标。
--找不到Python3(缺少:Python3_可执行解释器)(找到版本“3.6.6”)
--Python:version=3.6.6解释器=Python3\u可执行文件-NOTFOUND
在hello pyext/CMakeLists.txt:14处出现CMake错误(消息):
未找到Python 3和/或开发库。
-Python3_FOUND=FALSE
-Python3_Development_FOUND=TRUE
我在VS 2017的MinGW Bash和Developer命令提示符中得到了相同的结果,使用了以下所有版本的CMake:

  • Visual Studio 2017附带的cmake版本3.12.18081601-MSVC_2
  • cmake-3.13.4-win64-x64
    cmake.org
    下载
  • cmake-3.14.0-rc3-win64-x64
    cmake.org
    下载
  • cmake-3.14.20190305-gc9ce4f-win64-x64
    (截至本次编辑的最新开发版本)从
    cmake.org
我记得,我只使用了
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--版本
Python 3.4.4
C:\>python——版本
Python 3.6.6
C:\>python3--版本
“python3”未被识别为内部或外部命令,
可操作的程序或批处理文件。
C:\>
我还检查了一个开发人员的机器,他通过Anaconda安装了Python3.5作为他的主要Python,并从
Python.org
安装了3.6,得到了相同的结果

不推荐使用的
FindPythonInterp
似乎确实有效:

find_包(PythonInterp)
消息(“
PYTHONINTERP_FOUND=${PYTHONINTERP_FOUND}
PYTHON_可执行文件=${PYTHON_可执行文件}
PYTHON_VERSION_STRING=${PYTHON_VERSION_STRING}
")
--找到PythonInterp:C:/Program Files/Python36/python.exe(找到版本“3.6.6”)
PYTHONINTERP_FOUND=TRUE
PYTHON_EXECUTABLE=C:/Program Files/Python36/PYTHON.exe
PYTHON_版本_字符串=3.6.6

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

根据[CMake issue 19024(),这里的问题是我在做一个32位构建(默认情况下,因为我没有配置
-x64
)在一个只安装了64位Python的系统上。FindPython3感觉它已经找到了32位开发工具(尽管它没有),意识到它找不到32位解释器,因此设置
Python3\u found=False

通过使用
-a x64
配置来执行64位生成,修复了该问题

“查找不存在的32位开发工具”问题(导致它打印上述问题中的
Python3\u Development\u FOUND=TRUE
)是
FindPython3
模块中的一个错误,该错误已由修复,可在20190316夜间版本中使用。不幸的是,这没有进入3.14.0版本

作为参考,您希望在FindPython3成功运行后构建扩展:

Python3_add_library(myext MODULE myextsrc)
target_link_libraries(myext other_target_on_which_it_depends)
Python3_add_library(myext MODULE myextsrc)
target_link_libraries(myext other_target_on_which_it_depends)