Setting the pyhton3 flag in CMake has no affect if there is a python alias. If python points to python2 then python2 bindings will be created no matter the state of python3 flag. If python points to python3 then python3 bindings will be created no matter the state of the python3 flag. A workaround is to set PYTHON_EXECUTABLE. I'm opening a bug report as the flag doesn't do what a I would expect it to do naively, actually I'm not sure what it does.
Discussed on the forum here: https://root-forum.cern.ch/t/how-to-properly-install-pyroot-for-python-3/26367
Mentioned in previous bug reports: https://sft.its.cern.ch/jira/browse/ROOT-4554 and https://sft.its.cern.ch/jira/browse/ROOT-4627