Même dans un environnement sans python3, j'ai créé un fichier python qui peut être exécuté après l'installation de python3.
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.
[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.
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.
** 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