[petsc-dev] Configure won't find python

Satish Balay balay at mcs.anl.gov
Sat Apr 18 14:15:23 CDT 2020


On Sat, 18 Apr 2020, Jacob Faibussowitsch wrote:

> > command -v $pyimpls > /dev/null && echo Using: $pyimpl && exec $pyimpl "$@"
> 
> As Lisandro noted below, command -v would have to be swapped out since it also picks up aliases and doesn’t error out.

Sure - I was pointing an alternate mode [without mixing shell and python in the same script]

[also - don't know if 'command' is portable]

> 
> Also shouldn’t the final command sequence be “$pyimpl $0 $@“ so that it runs the configure script it was passed?

Nope

> > -#!/usr/bin/env python
> > +#!./python-detect

i.e replacing python with python-detect - i.e a wrapper over python.

Perhaps it could be called python-wrapper [in ./lib/petsc/bin/ ]

Satish

> 
> >> BTW, Are you aware of the behavior of `command -v` with shell aliases?
> >> 
> >> $ alias python=python3
> >> $ command -v python
> >> alias python='python3'
> 
> Best regards,
> 
> Jacob Faibussowitsch
> (Jacob Fai - booss - oh - vitch)
> Cell: (312) 694-3391
> 
> > On Apr 18, 2020, at 1:53 PM, Satish Balay <balay at mcs.anl.gov> wrote:
> > 
> > I guess this is an alternate way to implement this logic..
> > 
> > diff --git a/configure b/configure
> > index 4538314871..8dddfed05d 100755
> > --- a/configure
> > +++ b/configure
> > @@ -1,4 +1,4 @@
> > -#!/usr/bin/env python
> > +#!./python-detect
> > 
> > import sys, os
> > 
> > diff --git a/python-detect b/python-detect
> > new file mode 100755
> > index 0000000000..1fdfe795c8
> > --- /dev/null
> > +++ b/python-detect
> > @@ -0,0 +1,6 @@
> > +#!/bin/sh
> > +for pyimpl in python3 python2 python ; do
> > +   command -v $pyimpls > /dev/null && echo Using: $pyimpl && exec $pyimpl "$@"
> > +done
> > +echo “Could not locate python! Please have python3 python2 or python in PATH
> > +exit 2
> > 
> > 
> > Satish
> > 
> > On Fri, 17 Apr 2020, Jacob Faibussowitsch wrote:
> > 
> >> Hello All,
> >> 
> >> I use an Ubuntu docker image based on jedbrown/mpich-ccache and ran into the following error (Dockerfile attached as well).
> >> 
> >> If in a user only has python3 installed and not python2 then /usr/bin/python doesn’t exist. Given that python2 has gone the way of the dodo perhaps petsc should be looking for python3 over python2. This is a somewhat funky but functioning implementation that replaces the shebang line in configure that I have been using to default to python3. I don’t know how portable it is however, I believe “command" is not universally available in every shell?
> >> 
> >> #!/bin/sh
> >> 
> >> # “”” is comment in python, and : is noop in shell so this configure can be run as ./configure and python2.7 ./configure
> >> """:"
> >> 
> >> # Find the right python implementation, check by sending it on over to dave
> >> for pyimpls in python3 python2 python /usr/bin/python /usr/bin/env python ; do
> >>   command -v > /dev/null $pyimpls && exec $pyimpls $0 "$@“
> >> done
> >> 
> >> # Error code in case things go awry
> >> 
> >> Echo “PYTHON NOT FOUND” >2
> >> 
> >> exit 2
> >> 
> >> ":"""
> >> 
> >> if sys.version_info < (2,6) or (sys.version_info >= (3,0) and sys.version_info < (3,4)):
> >>  print('************************************************************************')
> >>  print('*      Python version 2.6+ or 3.4+ is required to run ./configure      *')
> >>  print('*         Try: "python2.7 ./configure" or "python3 ./configure"        *')
> >>  print('************************************************************************')
> >>  sys.exit(4)
> >> 
> >> sys.path.insert(0, os.path.abspath('config'))
> >> import configure
> >> configure.petsc_configure([])
> >> 
> >> 
> >> Best regards,
> >> 
> >> Jacob Faibussowitsch
> >> (Jacob Fai - booss - oh - vitch)
> >> Cell: (312) 694-3391
> >> 
> >> 
> 
> 


More information about the petsc-dev mailing list