Sh et py s'exécutent après l'installation de Python3

Même dans un environnement sans python3, j'ai créé un fichier python qui peut être exécuté après l'installation de python3.

Plan

On suppose qu'il est peu probable que quiconque puisse faire quoi que ce soit en tant que root dans l'environnement de développement.

référence

[Comment écrire un shebang correct dans des scripts Perl, Python et Ruby] Vous pouvez écrire plus d'un shebang! ?? Je l'ai cherché. C'était exactement Don Pisha, et sans cet article, je n'aurais pas fait une chose aussi stupide.

Comment écrire Ruby qui peut également être exécuté en PHP Bien que l'objectif soit différent, j'ai été inspiré par le fait qu'un fichier a plusieurs langues. Je veux essayer ça aussi.

code

install_python3.py


#!/bin/sh
# -*- coding: UTF-8 -*-

""":"

#Écrivez sh ici

#Installation et décompression de la version d'installation et du fichier compressé
tmp='/tmp/'
pythonver='3.4.3'
binarypath=$tmp'Python-'$pythonver

#Lieu d'installation
lib='/usr/lib/'
srcpath=$lib'python'$pythonver

#emplacement d'installation du lien symbolique python3
bin='/usr/bin/'
lnname='python3'

if [ -f $bin$lnname ]; then
    #Si vous avez python3, exécutez python tel quel
    echo 'Aucune installation requise'
    exec $lnname "$0" ${1+"$@"}
fi

echo 'Installation requise'

if [ -f $binarypath'.tgz' ]; then
    echo $binarypath'.tgz existe déjà'
else
    echo $binarypath'.Télécharger tgz'
    wget https://www.python.org/ftp/python/${pythonver}/Python-${pythonver}.tgz -P ${tmp}
fi

if [ -d $binarypath ]; then
    echo $binarypath'Est déjà là'
else
    echo $binarypath'Développer à'
    tar zxf $binarypath'.tgz' -C $tmp
fi

if [ -d $srcpath ]; then
    echo $srcpath'Installé dans'
else
    echo $srcpath'Installer sur'
    #Si vous cd, ce sera de la mousse dans une exécution python ultérieure, alors revenez après l'installation
    pwd=`pwd`
    cd $binarypath && ./configure --prefix=${srcpath} && make && make install
    cd $pwd
fi

if [ -f $bin$lnname ]; then
    echo $bin$lnname'Déjà installé'
else
    echo $bin$lnname'À installer'
    ln -s $srcpath'/bin/python3' $bin$lnname
fi

exec $lnname "$0" ${1+"$@"}
"""

#D'ici python

import sys

version = sys.version_info
if version[0] == 2:
    print('2')
else:
    print(version[0])




Au début, si la version de python était 2, j'ai remplacé python par 3, mais je l'ai arrêté car cela semblait affecter d'autres choses et en fait, yum a cessé de fonctionner. L'exemple d'échec ci-dessous en est un vestige.

Exemple d'échec

** Le langage dynamique n'est-il pas analysé et exécuté ligne par ligne avec un interprète? ** ** ** Alors ça va si vous ne passez pas par la partie problématique? ** **

Quand je l'utilise normalement, je me rends toujours compte que cela n'arrive pas, mais une fois que je peux atteindre l'objectif, je pense que c'est pratique pour moi.

** J'ai essayé de déterminer la version en python et de mettre à jour python en python **


#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import os
import tarfile

version = sys.version_info
if version[0] == 2:
    print 'Mettre à jour à 3 pour la version 2'
    if not os.path.isfile('/tmp/Python-3.4.3.tgz'):
        print 'Télécharger'
        os.system('wget https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tgz -P /tmp')
    else:
        print '/tmp/Python-3.4.3.tgz existe déjà'

    # 2.Parce que c'est 4, extraire tout est beau
    if not os.path.isdir('/tmp/Python-3.4.3'):
        print '/tmp/Python-3.4.Passez à 3 et installez'
        tf = tarfile.open('/tmp/Python-3.4.3.tgz', 'r')
        tf.list()
        for item in tf:
            tf.extract(item, '/tmp/')
        #Construire
        if not os.path.isdir('/usr/lib/python3.4.3'):
            os.system('cd /tmp/Python-3.4.3/ && ./configure --prefix=/usr/lib/python3.4.3 && make && make install')
        else:
            print '/usr/lib/python3.4.Installé sur 3'
    else:
        print '/tmp/Python-3.4.Étendu à 3'


    # /usr/bin/remplacement de python
    if not os.path.isfile('/usr/bin/python.old'):
        os.rename('/usr/bin/python', '/usr/bin/python.old')
        os.symlink('/usr/lib/python3.4.3/bin/python3.4', '/usr/bin/python')
        #Existant/usr/bin/python2 est un lien symbolique vers python, alors mettez-le à jour
        #L'écrasement n'est pas raisonnable, alors supprimez-le une fois
        os.remove('/usr/bin/python2')
        os.symlink('/usr/bin/python2.4', '/usr/bin/python2')
    else:
        print '/usr/lib/python a été remplacé'

    sys.exit()

#Cela devrait être fait dans le cas de 3
print('test')

A l'époque de python2, print ('test') était sûr, donc j'ai pensé "je peux y aller!", Mais quand je l'ai élevé à 3, après tout c'était print et erreur de syntaxe Il semble que print et print () puissent être utilisés en python2 ... J'ai été motivé par ma conviction (transfert de responsabilité)

Eh bien, avant de commencer à écrire, je viens de lire [PHP runtime and compile time] et j'ai réalisé que c'était tout simplement impossible.

php Même s'il semble spécifier le fichier de code source dans la commande et l'exécuter directement comme hoge.php, l'interpréteur moderne analyse le code source puis le compile dans le code d'octet de la machine virtuelle. Ruby, Python, Perl5, Emacs également.

** Mais je pensais juste que python3, qui n'utilisait pas print du côté python2 et gardait la syntaxe, pourrait toujours fonctionner!


Je n'ai pas l'intention de l'utiliser.

Recommended Posts

Sh et py s'exécutent après l'installation de Python3
À propos de l'installation des séries Pwntools et Python2
Installer Python 3.4.3.
[Débutant] Installation de Python et exécution de programmes (Windows)
Installez et exécutez Python3.5 + NumPy + SciPy sur Windows 10
Remarques sur l'installation de Python3 et l'utilisation de pip sous Windows7
Après l'installation de Linux
Écrivons un programme Python et exécutons-le
[Note] Installation de Python 3.6 + α sur Windows et RHEL
Que sont les taples et * args python après tout?
Si vous essayez d'installer Python2 pip après avoir installé Python3 pip et qu'il est rejeté
Le processus d'installation d'Atom et de l'exécution de Python
Installation de Python 3 sur Mac et vérification du fonctionnement de base Partie 1
Astuces Python et Numpy
[Python] pip et roue
Exécutez Python avec VBA
Exécutez prepDE.py avec python3
Itérateur et générateur Python
Paquets et modules Python
Intégration Vue-Cli et Python
Ruby, Python et carte
Exécutez Python à partir d'Excel
Exécutez Blender avec python
Installer des pandas sur python2.6
entrée et sortie python
Python et Ruby se séparent
Tutoriel Cloud Run (python)
Python asyncio et ContextVar
Exécutez iperf avec python
Supprimer les espaces pleine largeur avant et après la chaîne (python)
[Python débutant] Comment puis-je développer et exécuter Python après tout?
La série Python 3.4 est sûre pour installer et exécuter Python Kivy (macOS)
Exécutez le fichier python après avoir activé l'environnement virtuel python avec le fichier de commandes