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.
future
--von __future__ import unicode_literals
kann belassen werden, daher ist es ausgeschlossen, diff zu reduzieren.print
callable
--callable
ist nicht nur für Python 3.0 / 3.1 verfügbar und nicht erforderlich, da eine Migration auf Python 3.5.x erwartet wird.Überschreiben Sie die Originaldatei mit der Option -w und führen Sie die Konvertierung durch.
$ 2to3 -x future -x print -x callable -w .
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'
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
mysqlclient
anstelle von MySQL-python
verwenden.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'
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'
Wo bist du gegangen
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