0

I am delivering a Makefile to some people to run some python steps, example:

build: pip install -r requirements.txt package: python3 -m build 

The assumption here is that some of the people running the Makefile will have python 3 responding by calling python while some other will have it responding at python3 (some of them will even have an alias that will make both respond). Same happens for pip/pip3 command.

How can I discover which is the name of the interpreters to invoke programmatically through the same Makefile?

I don't want to tell them to change the Makefile manually to fit their system, I want it simply to work.

1 Answer 1

1

You can figure out what version of python (or pip?) it is by parsing the output of shell command asking for the version string:

# Variable for the python command (later overwritten if not working) PYTHON_COMMAND := python # Get version string (e.g. Python 3.4.5) PYTHON_VERSION_STRING := $(shell $(PYTHON_COMMAND) -V) # If PYTHON_VERSION_STRING is empty there probably isn't any 'python' # on PATH, and you should try set it using 'python3' (or python2) instead. ifeq $(PYTHON_VERSION_STRING), PYTHON_COMMAND := python3 PYTHON_VERSION_STRING := $(shell $(PYTHON_COMMAND) -V) ifeq $(PYTHON_VERSION_STRING), $(error No Python 3 interpreter found on PATH) endif endif # Split components (changing "." into " ") PYTHON_VERSION_TOKENS := $(subst ., ,$(PYTHON_VERSION_STRING)) # Python 3 4 5 PYTHON_MAJOR_VERSION := $(word 2,$(PYTHON_VERSION_TOKENS)) # 3 PYTHON_MINOR_VERSION := $(word 3,$(PYTHON_VERSION_TOKENS)) # 4 # What python version pip targets is a little more difficult figuring out from pip # version, having python version at the end of a string containing a path. # Better call pip through the python command instead. PIP_COMMAND := $(PYTHON_COMMAND) -m pip 
Sign up to request clarification or add additional context in comments.

1 Comment

Became increasingly unsure of what OP was after when writing this. Published anyway, and suggest OP and edit according to the exact needs or comment why this isn't what was sought for.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.