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.
future
--from __future__ import unicode_literals peut être laissé, il est donc exclu pour réduire les différences.printprint et j'ai exclu l'instruction print car elle ne devrait pas existercallable
--callable n'est pas disponible uniquement pour Python 3.0 / 3.1 et n'est pas requis car il devrait migrer vers Python 3.5.x.Remplacez le fichier d'origine avec l'option -w et exécutez la conversion.
$ 2to3 -x future -x print -x callable -w .
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'
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
mysqlclient au lieu de MySQL-python.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'
binary comme argument à hashlib.sha1Bad
>>> 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'
Où êtes-vous allé
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