Re: Python versions (was Re: RHEL 8.0 build) - Mailing list pgsql-hackers

From Tom Lane
Subject Re: Python versions (was Re: RHEL 8.0 build)
Date
Msg-id 30972.1567887505@sss.pgh.pa.us
Whole thread Raw
In response to Re: Python versions (was Re: RHEL 8.0 build)  (Peter Eisentraut <peter.eisentraut@2ndquadrant.com>)
Responses Re: Python versions (was Re: RHEL 8.0 build)
List pgsql-hackers
Peter Eisentraut <peter.eisentraut@2ndquadrant.com> writes:
>>> [ patch to search for python, then python3, then python2 ]

> Committed with some documentation updates.

> I only backpatched to PG10, because before that the handling of absolute
> paths vs nonabsolute paths is a bit murky and inconsistent, so I didn't
> want to add more logic and potentially confusing documentation on top of
> that.

So this subject has just intruded itself again, because new buildfarm
member "morepork" is failing in the pre-v10 branches, because ... you
guessed it ... it has "python3" but not "python".  This situation is
going to get worse, not better, as time goes on, so I think we really
should back-patch 7291733ac into all active branches.

You were concerned about the fact that b21c569ce had changed
AC_PATH_PROG to PGAC_PATH_PROGS here, but I think we can just ignore
that and make the patch be s/AC_PATH_PROG/AC_PATH_PROGS/, because
that isn't going to change the behavior of that macro w.r.t.
overriding.  It was the places that had had AC_CHECK_PROGS that we
were worried about the behavior of, and this place never did have it.
Demonstration that it won't change anything is the very small delta
in the actual configure script in the attached patch for 9.6.
(I've not tested this yet for 9.5 or 9.4, but it appears to apply
cleanly in those branches.)

Thoughts?

            regards, tom lane

diff --git a/config/python.m4 b/config/python.m4
index b95c8ed..b8d5b89 100644
--- a/config/python.m4
+++ b/config/python.m4
@@ -6,10 +6,17 @@

 # PGAC_PATH_PYTHON
 # ----------------
-# Look for Python and set the output variable 'PYTHON'
-# to 'python' if found, empty otherwise.
+# Look for Python and set the output variable 'PYTHON' if found,
+# fail otherwise.
+#
+# As the Python 3 transition happens and PEP 394 isn't updated, we
+# need to cater to systems that don't have unversioned "python" by
+# default.  Some systems ship with "python3" by default and perhaps
+# have "python" in an optional package.  Some systems only have
+# "python2" and "python3", in which case it's reasonable to prefer the
+# newer version.
 AC_DEFUN([PGAC_PATH_PYTHON],
-[AC_PATH_PROG(PYTHON, python)
+[AC_PATH_PROGS(PYTHON, [python python3 python2])
 if test x"$PYTHON" = x""; then
   AC_MSG_ERROR([Python not found])
 fi
diff --git a/configure b/configure
index cfaf11a..48edbf1 100755
--- a/configure
+++ b/configure
@@ -7683,8 +7683,10 @@ fi
 fi

 if test "$with_python" = yes; then
-  # Extract the first word of "python", so it can be a program name with args.
-set dummy python; ac_word=$2
+  for ac_prog in python python3 python2
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
 if ${ac_cv_path_PYTHON+:} false; then :
@@ -7723,6 +7725,9 @@ $as_echo "no" >&6; }
 fi


+  test -n "$PYTHON" && break
+done
+
 if test x"$PYTHON" = x""; then
   as_fn_error $? "Python not found" "$LINENO" 5
 fi
diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index 481f2ac..cae7973 100644
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -1441,7 +1441,8 @@ su - postgres
          <![%standalone-include[the <application>PL/Python</>
          documentation]]>
          <![%standalone-ignore[<xref linkend="plpython-python23">]]>
-         for more information.
+         for more information.  If this is not set, the following are probed
+         in this order: <literal>python python3 python2</literal>.
         </para>
        </listitem>
       </varlistentry>

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: SQL-spec incompatibilities in similar_escape() and related stuff
Next
From: Tom Lane
Date:
Subject: Re: Change ereport level for QueuePartitionConstraintValidation