FindPythonLibsNew.cmake finds wrong python interpreter when using pyenv
hakonhagland opened this issue · 1 comments
hakonhagland commented
I created a simple test module example/example.cpp
using the pybind11
library, then to compile it I used CMakeLists.txt
:
cmake_minimum_required(VERSION 2.8.12)
project(example)
set(PYBIND_DIR "/home/hakon/pybind11/pybind11")
add_subdirectory(${PYBIND_DIR} pybind11)
pybind11_add_module(example example/example.cpp)
then created a build
folder, and ran cmake
:
mkdir build
cd build
cmake ..
The output is:
-- Found PythonInterp: /home/hakon/.pyenv/shims/python3.8 (found version "1.4")
CMake Error at /home/hakon/pybind11/pybind11/tools/FindPythonLibsNew.cmake:96 (message):
Python config failure:
pyenv: python3.8: command not found
The `python3.8' command exists in these Python versions:
3.8.0
3.8.0-debug
Call Stack (most recent call first):
/home/hakon/pybind11/pybind11/tools/pybind11Tools.cmake:16 (find_package)
/home/hakon/pybind11/pybind11/CMakeLists.txt:33 (include)
-- Configuring incomplete, errors occurred!
See also "/home/hakon/pybind11/test/build/CMakeFiles/CMakeOutput.log".
I am using pyenv
with the following versions installed:
$ pyenv versions
system
2.7.16
* 3.7.3 (set by /home/hakon/.pyenv/version)
3.8.0
3.8.0-debug
Notice that pybind11Tools.cmake
finds the version 3.8.0
even though the current is set to 3.7.3
. If I shift to version 3.8.0
it runs fine:
$ pyenv local 3.8.0
$ cmake ..
-- Found PythonInterp: /home/hakon/.pyenv/shims/python3.8 (found version "3.8")
-- Found PythonLibs: /home/hakon/.pyenv/versions/3.8.0/lib/libpython3.8.a
-- Performing Test HAS_CPP14_FLAG
-- Performing Test HAS_CPP14_FLAG - Success
-- pybind11 v2.5.dev1
-- Performing Test HAS_FLTO
-- Performing Test HAS_FLTO - Success
-- LTO enabled
-- Configuring done
-- Generating done
-- Build files have been written to: /home/hakon/pybind11/test/build
henryiii commented
This pretty much always finds the wrong interpreter for me, it's just a light helper on top of FindPythonLibs/Interp that favors Python 3, which were abandoned by CMake because they has so many problems.
I am working on #2156 , but until then, the canonical command is:
cmake .. -DPYTHON_EXECUTABLE=$(which python)