GNU/Linux >> Znalost Linux >  >> Linux

shebang env preferovanou verzi pythonu

#!/bin/sh
''''which python2 >/dev/null 2>&1 && exec python2 "$0" "[email protected]" # '''
''''which python  >/dev/null 2>&1 && exec python  "$0" "[email protected]" # '''
''''exec echo "Error: I can't find python anywhere"         # '''

import sys
print sys.argv

Nejprve se spustí jako skript shellu. Mezi '''' můžete vložit téměř jakýkoli kód shellu a # ''' . Takový kód bude spuštěn shellem. Poté, když python běží na souboru, python bude ignorovat řádky, protože vypadají jako řetězce s trojitými uvozovkami pro python.

Shell skript testuje, zda binární soubor existuje v cestě s which python2 >/dev/null a pak jej provede, pokud ano (se všemi argumenty na správném místě). Další informace naleznete v tématu Proč funguje tento úryvek se znakem #!/bin/sh a exec python uvnitř 4 jednoduchých uvozovek?

Poznámka:Řádek začíná čtyřmi ' a mezi čtvrtým ' nesmí být žádná mezera a začátek příkazu shellu (which ...)


Něco takového:

#!/usr/bin/env python
import sys
import os
if sys.version_info >= (3, 0):
    os.execvp("python2.7", ["python2.7", __file__])
    os.execvp("python2.6", ["python2.6", __file__])
    os.execvp("python2", ["python2", __file__])
    print ("No sutable version of Python found")
    exit(2)

Aktualizovat Níže je jeho robustnější verze.

#!/bin/bash

ok=bad
for pyth in python python2.7 python2.6 python2; do
  pypath=$(type -P $pyth)
  if [[ -x $pypath ]] ; then
    ok=$(
      $pyth <<@@

import sys 
if sys.version_info < (3, 0):
  print ("ok")
else:
  print("bad")
@@

    )
    if [[ $ok == ok ]] ; then
      break
    fi
  fi
done

if [[ $ok != ok ]]; then
  echo "Could not find suitable python version"
  exit 2
fi

$pyth <<@@
<<< your python script goes here >>>
@@

Linux
  1. Jak nainstalovat Python na Ubuntu 20.04 a 18.04?

  2. Více argumentů v Shebang?

  3. Ubuntu Python shebang line nefunguje

  1. Jak změnit výchozí verzi pythonu na Debian 9 Stretch Linux

  2. Jak bezpečně nainstalovat starší/novější verzi Pythonu?

  3. Tox nainstaluje špatnou verzi pip do svého virtuálního prostředí

  1. Proč je Python 2.7 stále výchozí verzí Pythonu v Ubuntu?

  2. Win-KeX verze 2.0

  3. pytest běžící s jinou verzí pythonu