Note de travail pour migrer et mettre à jour les scripts de la série Python 2 sur le cloud vers la série 3
Qu'est-ce que c'est
- ~~ Travail toujours ~~ Un mémorandum de travail (y compris la préparation préalable) lors de la mise à jour des scripts de la série Python 2 vers la série 3
supposition
--Utilisation de pyenv pour le contrôle de version Python
--Docker, virtualenv, Pipenv ne sont pas utilisés
Aperçu
- Décidez quel Python migrer
- Vérifiez localement
- Élever la version en production (stg)
procédure
- Ce qui suit est une brève procédure de migration.
enquête préliminaire
Vérifiez l'environnement d'exploitation actuel
- La version de Python à mettre à jour est limitée en fonction du système d'exploitation que vous utilisez, alors étudiez à l'avance.
--Faites
pyenv install --list
sur le serveur pour voir quelle version de Python vous pouvez migrer
- Voici un exemple lorsque le système d'exploitation Linux est
Linux: Amazon Linux AMI version 2016.03
[ec2-user@app]$ pyenv install --list
Available versions:
#Omission
3.6.0
3.6-dev
3.6.1
3.6.2
3.6.3
3.6.4
3.7.0b2
3.7-dev
3.8-dev
#Omission
Décidez de la version Python vers laquelle migrer
- Sélectionnez la version Python parmi les versions qui peuvent être mises à jour avec
pyenv install --list
plus tôt.
- Évitez ceux avec «dev» ou «b *» après le numéro de version du correctif car ce ne sont pas des versions stables.
- Le Guide du développeur Python décrit la date limite de maintenance pour chaque version, choisissez donc celle avec la fin de vie la plus longue possible.
- Dans l'exemple précédent de
Linux: Amazon Linux AMI version 2016.03
, il est approprié de le définir sur 3.6.4
pour la raison ci-dessus.
- Python Developer’s Guide: https://devguide.python.org/#status-of-python-branches
Vérification du fonctionnement local
Identifier la logique qui ne peut pas être utilisée dans la série Python 3
-Essayez de mettre à jour le code Python avec futurize
- Nous vérifierons les fichiers et les méthodes qui n'ont pas été appliqués.
- Cela semble être la méthode recommandée par le Python officiel
--Portage de Python 2 vers Python 3: https://docs.python.org/ja/3/howto/pyporting.html#porting-python-2-code-to-python-3
- futurize Py2 to Py2/3: http://python-future.org/automatic_conversion.html#stage-1-safe-fixes
Essayez la conversion automatique en notation Python3
- [2to3](2to3 - Conversion de code automatique de Python 2 à 3) convertit automatiquement la notation qui n'est valide qu'en Python2 en notation système 3 (dans une certaine mesure).
――Si la plage d'influence sur le 3ème système est grande, vous pouvez essayer de la convertir immédiatement ici (la confiance excessive est interdite, la vérification du fonctionnement doit être effectuée)
- C'est aussi la méthodologie décrite dans la documentation officielle de Python3.
- Conversion de code automatique 2to3 Python 2 vers 3: https://docs.python.org/ja/3/library/2to3.html#module-lib2to3
Changement de version Python et exécution de script
- Une fois que vous avez une idée de la migration du code et de la logique dans la bibliothèque ci-dessus, vous pouvez en fait l'exécuter localement.
- L'ordre principal est "changement de version avec
pyenv
", "installation de bibliothèque" et "exécution de script".
- S'il y a une logique qui ne peut pas être complétée localement, telle que la partie qui doit être connectée au DB, ignorez-la et n'exécutez que la partie qui peut être exécutée.
Notez la méthode de sauvegarde en cas de mousse
- Si cela fonctionne localement, vous devrez mettre à jour stg et l'environnement de production.
―― Avant cela, décrivons l'opération de basculement de "S'il y a un problème avec l'opération en code Python 3" dans le document ou quelque chose.
- Travail de commutation spécifiquement attendu
- Passer à une ancienne version de Python avec
pyenv
--Revert commit pour le code mis à jour
--Réinstaller la bibliothèque avec l'ancienne version
Mise en œuvre de la transition
Après cela, nous allons enfin changer la version Python du script de production.
- S'il existe un environnement stg, implémentez-le d'abord dans l'environnement stg
Changer de version de Python
--Changez la version Python avec pyenv
# 3.6.Installer 4
$ pyenv install 3.6.4
$ pyenv versions
system
* 2.7 (set by /home/ec2-user/.pyenv/version)
3.6.4 #Aurait dû être ajouté
$ pyenv local 3.6.4
$ pyenv rehash
$ pyenv versions
system
2.7 (set by /home/ec2-user/.pyenv/version)
* 3.6.4 #Aurait dû changer
$ python --version
Python 3.6.4 #Aurait dû changer
Réinstaller la bibliothèque
--Installez la bibliothèque dans l'environnement Python3
--Ce qui suit est un exemple d'installation à l'aide de requirements.txt
$ pip install -r requirements.txt
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests->-r requirements.txt (line 5))
Cache entry deserialization failed, entry ignored
Downloading https://files.pythonhosted.org/packages/e1/e5/df302e8017440f111c11cc41a6b432838672f5a70aa29227bf58149dc72f/urllib3-1.25.9-py2.py3-none-any.whl (126kB)
100% |████████████████████████████████| 133kB 9.1MB/s
Collecting certifi>=2017.4.17 (from requests->-r requirements.txt (line 5))
Cache entry deserialization failed, entry ignored
Cache entry deserialization failed, entry ignored
Downloading https://files.pythonhosted.org/packages/57/2b/26e37a4b034800c960a00c4e1b3d9ca5d7014e983e6e729e33ea2f36426c/certifi-2020.4.5.1-py2.py3-none-any.whl (157kB)
100% |████████████████████████████████| 163kB 7.3MB/s
#Ce qui suit est omis
Vérifier le fonctionnement du script
- Si le script peut être déplacé manuellement, essayez d'exécuter le script.
--Si cela fonctionne comme prévu sans générer d'erreur, la migration est réussie.
――Il est préférable d'obtenir le journal des opérations et de le recracher dans un fichier ou de le coller dans le document.
[ec2-user@app]$ python main.py
Document de référence