[CMake] Finding Python3

Michael Wild themiwi at gmail.com
Wed Jul 21 14:40:27 EDT 2010


On 21. Jul, 2010, at 18:59 , Alan W. Irwin wrote:

> On 2010-07-21 08:50-0700 Alan W. Irwin wrote:
> 
>> To draw this subthread to a definite conclusion, here is what works
>> for me now to get python version for either python2 or python3.
>> 
>> software at raven> python -c \
>> 'import sys; print("%s.%s.%s" % sys.version_info[0:3])'
>> 2.6.5
>> 
>> software at raven> python3 -c \
>> 'import sys; print("%s.%s.%s" % sys.version_info[0:3])'
>> 3.1.2
>> 
>> So I would recommend this command form to determined the python
>> version corresponding to the found interpreter for CMake.
> 
> Hmm. It turns out you have to swap double and single quotes to get
> this to work from cmake.  So here (subject to my mailer wrapping the
> lines) is what PLplot uses now:
> 
> # Get the Python version.
> execute_process(
>  COMMAND
>  ${PYTHON_EXECUTABLE} -c "import sys; print('%s.%s.%s' % sys.version_info[0:3])"
>  OUTPUT_VARIABLE PYTHON_VERSION
>  OUTPUT_STRIP_TRAILING_WHITESPACE
>  )
> message(STATUS "PYTHON_VERSION = ${PYTHON_VERSION}")
> 
> Alan

Wouldn't using

import sys; sys.stdout.write('%s.%s.%s\n' % sys.version_info[0:3])

be safer? Because for python < 3 the parenthesis are grouping an expression, not surrounding a list of arguments. This is no problem as long as nobody adds a "," inside the parenthesis, because then the thing would become a tuple constructor.

Michael



More information about the CMake mailing list