FindPython2 fails to find /usr/bin/python2 because it finds a v3 python executable first while scanning PATH
In CMake 3.20.3 Modules/FindPython/Support.cmake
line 1619:
# try using standard paths
find_program (_${_PYTHON_PREFIX}_EXECUTABLE
NAMES ${_${_PYTHON_PREFIX}_NAMES}
NAMES_PER_DIR
PATH_SUFFIXES ${_${_PYTHON_PREFIX}_PATH_SUFFIXES})
_python_validate_interpreter (${${_PYTHON_PREFIX}_VALIDATE_OPTIONS})
if (_${_PYTHON_PREFIX}_EXECUTABLE)
break()
endif()
It seems that it gives up scanning rest of the PATH if it finds a v3 python first.
Specific example
- PATH is
/home/user/project/venv/bin:/usr/bin
. - The file
/home/user/project/venv/bin/python
exists and is v3. - Python2 exists at
/usr/bin/python2
.
Here is part of the debug-find log:
CMake Debug Log at /home/user/.local/lib/python3.8/site-packages/cmake/data/share/cmake-3.20/Modules/FindPython/Support.cmake:1619 (find_program):
find_program called with the following settings:
VAR: _Python2_EXECUTABLE
NAMES: "python2.7"
"python2.6"
"python2.5"
"python2.4"
"python2.3"
"python2.2"
"python2.1"
"python2.0"
"python2"
"python"
Documentation: Path to a program.
Framework
Only Search Frameworks: 0
Search Frameworks Last: 0
Search Frameworks First: 0
AppBundle
Only Search AppBundle: 0
Search AppBundle Last: 0
Search AppBundle First: 0
CMAKE_FIND_USE_CMAKE_PATH: 1
CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: 1
CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: 1
CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: 1
find_program considered the following locations:
/home/user/project/venv/bin/bin/python2.7
/home/user/project/venv/bin/bin/python2.6
/home/user/project/venv/bin/bin/python2.5
/home/user/project/venv/bin/bin/python2.4
/home/user/project/venv/bin/bin/python2.3
/home/user/project/venv/bin/bin/python2.2
/home/user/project/venv/bin/bin/python2.1
/home/user/project/venv/bin/bin/python2.0
/home/user/project/venv/bin/bin/python2
/home/user/project/venv/bin/bin/python
/home/user/project/venv/bin/Scripts/python2.7
/home/user/project/venv/bin/Scripts/python2.6
/home/user/project/venv/bin/Scripts/python2.5
/home/user/project/venv/bin/Scripts/python2.4
/home/user/project/venv/bin/Scripts/python2.3
/home/user/project/venv/bin/Scripts/python2.2
/home/user/project/venv/bin/Scripts/python2.1
/home/user/project/venv/bin/Scripts/python2.0
/home/user/project/venv/bin/Scripts/python2
/home/user/project/venv/bin/Scripts/python
/home/user/project/venv/bin/python2.7
/home/user/project/venv/bin/python2.6
/home/user/project/venv/bin/python2.5
/home/user/project/venv/bin/python2.4
/home/user/project/venv/bin/python2.3
/home/user/project/venv/bin/python2.2
/home/user/project/venv/bin/python2.1
/home/user/project/venv/bin/python2.0
/home/user/project/venv/bin/python2
The item was found at
/home/user/project/venv/bin/python
Call Stack (most recent call first):
/home/user/.local/lib/python3.8/site-packages/cmake/data/share/cmake-3.20/Modules/FindPython2.cmake:422 (include)
CMakeLists.txt:20 (find_package)
CMake Error at /home/user/.local/lib/python3.8/site-packages/cmake/data/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find Python2 (missing: Python2_EXECUTABLE Interpreter)
Reason given by package:
Interpreter: Wrong major version for the interpreter "/home/user/project/venv/bin/python"
Call Stack (most recent call first):
/home/user/.local/lib/python3.8/site-packages/cmake/data/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
/home/user/.local/lib/python3.8/site-packages/cmake/data/share/cmake-3.20/Modules/FindPython/Support.cmake:3165 (find_package_handle_standard_args)
/home/user/.local/lib/python3.8/site-packages/cmake/data/share/cmake-3.20/Modules/FindPython2.cmake:422 (include)
CMakeLists.txt:20 (find_package)