Migrieren Sie Django-Anwendungen, die unter Python 2.7 ausgeführt werden, auf Python 3.5

Was ist das?

Dieses Dokument ist ein Hinweis aus der Untersuchung der Kosten für die Migration von Django-Anwendung unter Python 2.7 auf Python 3.5.

2to3 Ändere xrange und keys (),values () Konvertieren Sie,items ()change mit 2to3.

Da es möglich ist, Konvertierungen anzugeben, die nicht mit -x angewendet werden, sind die folgenden Konvertierungen ausgeschlossen.

Überschreiben Sie die Originaldatei mit der Option -w und führen Sie die Konvertierung durch.

$ 2to3 -x future -x print -x callable -w .

Bibliotheken, die aktualisiert werden mussten

python-memcached

Ich denke jedoch, dass das Verhalten beim Einfügen der Binärdatei in Memcached verdächtig ist.

tweepy

google-api-python-client

Django Erfordert ein Update auf 1.8.x.

File "/home/csakatoku/.pyenv/versions/3.5.0/lib/python3.5/site-packages/django/utils/html_parser.py", line 12, in <module>
    HTMLParseError = _html_parser.HTMLParseError
AttributeError: module 'html.parser' has no attribute 'HTMLParseError'

Bibliotheken, die übertragen werden müssen

dnspython Sie müssen zu dnspython3 wechseln, das unter einem anderen Paketnamen veröffentlicht wurde. Wenn Sie bei der Installation mit "pip" "dnspython3" angeben, ist dies in Ordnung und Sie müssen den Code nicht ändern.

MySQL-python

Bibliothek, die nicht funktioniert

bitly-api Funktioniert nicht mit "ImportError". Es scheint jedoch, dass es in master behoben wurde.

>>> import bitly_api
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/csakatoku/.pyenv/versions/3.5.0/lib/python3.5/site-packages/bitly_api/__init__.py", line 1, in <module>
    from bitly_api import Connection, BitlyError, Error
ImportError: cannot import name 'Connection'

django_ses Ich habe versucht zu importieren aufgrund des Problems der try ... without-Anweisung Es fällt sofort. Es scheint jedoch, dass es im Master korrigiert wurde.

>>> import django_ses
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/csakatoku/.pyenv/versions/3.5.0/lib/python3.5/site-packages/django_ses/__init__.py", line 173
    except SESConnection.ResponseError, err:
                                      ^
SyntaxError: invalid syntax

pynliner SyntaxError durch die print Anweisung. Pull Request for Python 3 wurde ausgegeben.

Collecting pynliner
  Using cached pynliner-0.5.2.tar.gz
Collecting BeautifulSoup<4.0,>=3.2.1 (from pynliner)
  Using cached BeautifulSoup-3.2.1.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 20, in <module>
      File "/tmp/pip-build-7je9i10s/BeautifulSoup/setup.py", line 22
        print "Unit tests have failed!"
                                      ^
    SyntaxError: Missing parentheses in call to 'print'

Code, der behoben werden muss

Sie müssen "binary" als Argument an hashlib.sha1 übergeben

Bad

>>> import hashlib
>>> hashlib.sha1("SPAM").hexdigest()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Unicode-objects must be encoded before hashing
>>> hashlib.sha1("SPAM").hexdigest()

Good

>>> import hashlib
>>> hashlib.sha1("spam".encode("utf-8")).hexdigest()
'ded982e702e07bb7b6effafdc353db3fe172c83f'

Good

>>> import hashlib
>>> hashlib.sha1(b"spam").hexdigest()
'ded982e702e07bb7b6effafdc353db3fe172c83f'

urllib.basejoin ist weg

Wo bist du gegangen

Das Argument "sort" hat sich geändert

Bad

>>> data = [{"value": 1}, {"value": 3}, {"value": 2}]
>>> data.sort(lambda a, b: cmp(a["value"], b["value"]))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must use keyword argument for key function

Good

>>> data = [{"value": 1}, {"value": 3}, {"value": 2}]
>>> data.sort(key=lambda x: x["value"])
>>> print(data)
[{'value': 1}, {'value': 2}, {'value': 3}]

Diese Änderung ist die engste.

Recommended Posts

Migrieren Sie Django-Anwendungen, die unter Python 2.7 ausgeführt werden, auf Python 3.5
Aktualisieren Sie Anwendungen, die unter Django 1.7 ausgeführt werden, auf Django 1.8
Einführung in Python Django (2) Win
So erstellen Sie eine Django (Python) -Umgebung auf Docker
Aktualisieren Sie die Python, die Sie auf Ihrem Mac hatten, auf 3.7-> 3.8
Verwendung von Django mit Google App Engine / Python
Verliere nicht gegen Ruby! Wie man Python (Django) auf Heroku ausführt
Python 3.6 unter Windows ... und zu Xamarin.
Einführung in Python Hands On Teil 1
Python + Django + Scikit-Learn + Mecab (1) mit Heroku
Python + Django + Scikit-Learn + Mecab (2) mit Heroku
Schritte zum Installieren von python3 auf einem Mac
Einführung in Python Django (2) Mac Edition
Aktualisieren Sie Mac Python von 2 auf 3
Vorsichtsmaßnahmen beim Ausführen von Python unter EC2 über AWS Lambda (Befehl ausführen)
Alles vom Erstellen einer Python-Umgebung bis zur Ausführung unter Windows
Wie man pydoc auf Python Interpreter liest
[Kivy] So installieren Sie Kivy unter Windows [Python]
Erstellen Sie einen CGI-Server, der unter Python 3 in Docker ausgeführt wird
Verfolgen Sie aktive Anwendungen auf einem Mac mit Python
Schritte zum Installieren der Python-Umgebung unter Ubuntu
So löschen Sie Python 2.x auf einem Mac.
Herstellen einer Verbindung von Python zu MySQL unter CentOS 6.4
Memorandum über die Verwendung von Gremlin Python
Installieren Sie Python auf xserver, um pip zu verwenden
[Python] Führen Sie UIKit3 in das Django-Projekt ein
Arbeitsnotiz zum Migrieren und Aktualisieren von Skripten der Python 2-Serie in der Cloud auf 3-Serien
Ein Memo, das ein Tutorial zum Ausführen von Python auf Heroku erstellt hat
Auf Python 2.7.9 aktualisiert
Führen Sie eine Django-Anwendung unter Windows + Apache + mod_wsgi + aus.
Setzen Sie MicroPython unter Windows ein, um ESP32 unter Python auszuführen
[Version 2020] So installieren Sie Python3 auf EC2 von AWS
Einfache Möglichkeit, Python 2.7 unter Cent OS 6 zu verwenden
Strategie zur Monetarisierung mit Python Java
So installieren Sie OpenCV auf Jetson Nano Python
Python unter Windows
Python Django Tutorial (5)
Python Django Tutorial (2)
Twitter mit Python3
Einführung in 4 Möglichkeiten zur Überwachung von Python-Anwendungen mit Prometheus
Verwendung von Python Kivy ④ ~ Ausführung unter Android ~
So führen Sie MeCab unter Ubuntu 18.04 LTS Python aus
[Django] Wiederholen Sie die Migration
Python Django Tutorial (8)
Python Django Tutorial (6)
Python auf Mac
Eine Geschichte über das Ausführen von Python auf PHP auf Heroku
Einführung in Python mit Atom (unterwegs)
So schreiben Sie in Error Repoting in Python auf GAE
Python-Anfänger süchtig nach Django
Python auf Windbg
[Python] So installieren Sie OpenCV unter Anaconda [Windows]
Python Django Tutorial (7)
Python Django Tutorial (1)
Python Django Tutorial Tutorial
[Python] Fehlerbehebung für Anfänger beim Studium der Webanwendung von Django
Führen Sie Python auf Apache aus, um InfluxDB-Daten anzuzeigen
Python Django Tutorial (3)
Stellen Sie mit Python auf Raspberry Pi eine Verbindung zu MySQL her