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.print
print
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