Migrer les applications Django exécutées sur Python 2.7 vers Python 3.5

Qu'est-ce que c'est?

Ce document est une note d'enquête sur le coût de la migration de l'application Django fonctionnant sur Python 2.7 vers Python 3.5.

2to3 Changer xrange et [keys (),values () Remplacez, ʻitems ()](http://diveintopython3-ja.rdy.jp/porting-code-to-python-3-with-2to3.html#dict) par 2to3`.

Puisqu'il est possible de spécifier des conversions qui ne sont pas appliquées avec «-x», les conversions suivantes sont exclues.

Remplacez le fichier d'origine avec l'option -w et exécutez la conversion.

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

Bibliothèques à mettre à jour

python-memcached

Cependant, je pense que le comportement lors de la mise du binaire dans Memcached est suspect.

tweepy

google-api-python-client

Django Nécessite une mise à jour vers 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'

Bibliothèques à transférer

dnspython Vous devez changer pour dnspython3 publié sous un nom de package différent. Si vous spécifiez dnspython3 lors de l'installation avec pip, c'est OK et vous n'avez pas besoin de changer le code.

MySQL-python

Bibliothèque qui ne fonctionne pas

bitly-api Ne fonctionne pas avec ʻImport Error`. Cependant, il semble que cela ait été corrigé dans master.

>>> 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 Tentative d'importation en raison d'un problème avec l'instruction try ... ʻexcept` Il tombe en un instant. Cependant, il semble que cela ait été corrigé en master.

>>> 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 par l'instruction print. Pull Request for Python 3 a été émis.

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 qui doit être corrigé

Vous devez passer binary comme argument à hashlib.sha1

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 est parti

Où êtes-vous allé

L'argument de sort a changé

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}]

Ce changement est le plus serré.

Recommended Posts

Migrer les applications Django exécutées sur Python 2.7 vers Python 3.5
Mettre à jour les applications exécutées sur Django 1.7 vers Django 1.8
Introduction à Python Django (2) Win
Comment créer un environnement Django (python) sur Docker
Mettez à jour le python que vous aviez sur votre Mac à 3.7-> 3.8
Comment utiliser Django avec Google App Engine / Python
Ne perdez pas contre Ruby! Comment exécuter Python (Django) sur Heroku
Python 3.6 sous Windows ... et vers Xamarin.
Introduction à Python Hands On Partie 1
python + django + scikit-learn + mecab (1) avec heroku
python + django + scikit-learn + mecab (2) avec heroku
Étapes pour installer python3 sur Mac
Introduction à Python Django (2) Édition Mac
Mettre à jour Mac Python de 2 à 3
Précautions lors de l'exécution de Python sur EC2 à partir d'AWS Lambda (Exécuter la commande)
Tout, de la création d'un environnement Python à son exécution sous Windows
Comment lire pydoc sur l'interpréteur python
[Kivy] Comment installer Kivy sur Windows [Python]
Créer un serveur CGI fonctionnant sur Python 3 sur Docker
Chase des applications actives sur Mac avec Python
Étapes pour installer l'environnement Python sur Ubuntu
Comment effacer Python 2.x sur Mac.
Connexion de python à MySQL sur CentOS 6.4
Mémorandum sur l'utilisation du python gremlin
Installez python sur xserver pour utiliser pip
[Python] Présentez UIKit3 au projet Django
Note de travail pour migrer et mettre à jour les scripts de la série Python 2 sur le cloud vers la série 3
Un mémo qui a fait un tutoriel pour exécuter python sur heroku
Mis à jour vers Python 2.7.9
Exécutez une application django sur Windows + Apache + mod_wsgi + service.
Mettez MicroPython sur Windows pour exécuter ESP32 sur Python
[Version 2020] Comment installer Python3 sur EC2 d'AWS
Un moyen simple d'utiliser Python 2.7 sur Cent OS 6
Stratégie sur la façon de monétiser avec Python Java
Comment installer OpenCV sur Jetson Nano Python
Python sur Windows
Tutoriel Python Django (5)
Tutoriel Python Django (2)
twitter avec python3
Présentation de 4 façons de surveiller les applications Python à l'aide de Prometheus
Comment utiliser Python Kivy ④ ~ Exécution sur Android ~
Comment exécuter MeCab sur Ubuntu 18.04 LTS Python
[Django] Refaire la migration
Tutoriel Python Django (8)
Tutoriel Python Django (6)
python sur mac
Une histoire sur l'exécution de Python sur PHP sur Heroku
Introduction à Python avec Atom (en route)
Pour écrire dans Error Repoting en Python sur GAE
Débutants en Python accro à Django
Python sur Windbg
[Python] Comment installer OpenCV sur Anaconda [Windows]
Tutoriel Python Django (7)
Tutoriel Python Django (1)
Tutoriel du didacticiel Python Django
[Python] Dépannage des débutants tout en étudiant l'application Web de Django
Exécutez Python sur Apache pour afficher les données InfluxDB
Tutoriel Python Django (3)
Connectez-vous à MySQL avec Python sur Raspberry Pi