Arbeitsnotiz zum Migrieren und Aktualisieren von Skripten der Python 2-Serie in der Cloud auf 3-Serien

Was ist das
- ~~ arbeitet noch ~~ Ein Memorandum über die Arbeit (einschließlich der Vorbereitungen) beim Aktualisieren von Skripten der Python 2-Serie auf 3 Serien
Annahme
--Verwenden von pyenv für die Python-Versionskontrolle
- Docker, Virtualenv, Pipenv werden nicht verwendet
Überblick
- Entscheiden Sie, welches Python migriert werden soll
- Überprüfen Sie lokal
- Erhöhen Sie die Version in der Produktion (stg)
Verfahren
- Das Folgende ist ein kurzes Migrationsverfahren.
Voruntersuchung
Überprüfen Sie die aktuelle Betriebsumgebung
--Die zu aktualisierende Version von Python ist je nach verwendetem Betriebssystem begrenzt. Informieren Sie sich daher im Voraus.
- Installieren Sie "pyenv --list" auf dem Server, um zu sehen, welche Python-Version Sie migrieren können
- Das Folgende ist ein Beispiel, wenn das Linux-Betriebssystem "Linux: Amazon Linux AMI Release 2016.03" ist
[ec2-user@app]$ pyenv install --list
Available versions:
#Unterlassung
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
#Unterlassung
Entscheiden Sie, zu welcher Python-Version migriert werden soll
--Wählen Sie die Python-Version aus den Versionen aus, die früher mit pyenv install --list
aktualisiert werden können.
- Vermeiden Sie solche mit "dev" oder "b *" nach der Patch-Versionsnummer, da es sich nicht um stabile Versionen handelt.
- Python Developer's Guide hat die Wartungsfrist für jede Version, wählen Sie also die mit der längsten möglichen EOL.
- Im vorherigen Beispiel von "Linux: Amazon Linux AMI Release 2016.03" ist es aus dem oben genannten Grund angebracht, es auf "3.6.4" zu setzen.

- Python Developer’s Guide: https://devguide.python.org/#status-of-python-branches
Überprüfung des lokalen Betriebs
Identifizieren von Logik, die in Python 3-Serien nicht verwendet werden kann
- Versuchen Sie, den Python-Code mit [futurize] zu aktualisieren (http://python-future.org/automatic_conversion.html#stage-1-safe-fixes).
- Wir überprüfen die Dateien und Methoden, die nicht angewendet wurden.
- Es scheint die vom offiziellen Python empfohlene Methode zu sein

--Portieren von Python 2 nach 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
Versuchen Sie die automatische Konvertierung in die Python3-Notation
- [2to3](2to3 - Automatische Codekonvertierung von Python 2 nach 3) konvertiert automatisch die Notation, die nur in Python2 gültig ist, in die 3-Systemnotation (bis zu einem gewissen Grad).
――Wenn der Einflussbereich auf das 3. System groß ist, können Sie versuchen, es hier sofort zu konvertieren (übermäßiges Vertrauen ist verboten, die Überprüfung des Betriebs sollte durchgeführt werden).
- Dies ist auch die Methodik beschrieben in der offiziellen Python3-Dokumentation.

--2to3 Automatische Codekonvertierung von Python 2 in 3: https://docs.python.org/ja/3/library/2to3.html#module-lib2to3
Python-Versionswechsel & Skriptausführung
- Sobald Sie eine Vorstellung davon haben, wie Sie den Code und die Logik in der obigen Bibliothek migrieren können, können Sie ihn tatsächlich lokal ausführen.
- Die Hauptreihenfolge lautet "Versionswechsel mit" pyenv "", "Bibliotheksinstallation" und "Skriptausführung".
- Wenn es eine Logik gibt, die lokal nicht abgeschlossen werden kann, z. B. das Teil, das mit der Datenbank verbunden werden muss, überspringen Sie sie und führen Sie nur das Teil aus, das ausgeführt werden kann.
Notieren Sie sich die Sicherungsmethode bei Moos
- Wenn es lokal funktioniert, müssen Sie stg und die Produktionsumgebung aktualisieren.
――Vorher beschreiben wir die Rückschaltoperation von "Wenn es ein Problem mit der Operation in Python 3-Code gibt" im Dokument oder so.
- Speziell erwartete Switchback-Arbeit
- Wechseln Sie mit
pyenv
zu einer älteren Version von Python
- Für aktualisierten Code erneut festschreiben
- Installieren Sie die Bibliothek mit der alten Version neu
Umsetzung des Übergangs
―― Danach werden wir endlich die Python-Version des Produktionsskripts ändern.
--Wenn es eine stg-Umgebung gibt, implementieren Sie diese zuerst in der stg-Umgebung
Python-Versionen wechseln
--Schalten Sie die Python-Version mit pyenv
# 3.6.Installieren Sie 4
$ pyenv install 3.6.4
$ pyenv versions
system
* 2.7 (set by /home/ec2-user/.pyenv/version)
3.6.4 #Sollte hinzugefügt worden sein
$ pyenv local 3.6.4
$ pyenv rehash
$ pyenv versions
system
2.7 (set by /home/ec2-user/.pyenv/version)
* 3.6.4 #Sollte sich geändert haben
$ python --version
Python 3.6.4 #Sollte sich geändert haben
Bibliothek neu installieren
--Installieren Sie die Bibliothek in der Python3-Umgebung
- Das Folgende ist ein Beispiel für die Installation mit
require.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
#Folgendes wird weggelassen
Überprüfen Sie die Funktionsweise des Skripts
- Wenn das Skript manuell verschoben werden kann, führen Sie das Skript aus.
- Wenn es wie erwartet funktioniert, ohne einen Fehler auszulösen, ist die Migration erfolgreich.
――Es ist am besten, das Operationsprotokoll abzurufen und in eine Datei auszuspucken oder in das Dokument einzufügen.
[ec2-user@app]$ python main.py
Referenzdokument
