线上Django项目python2到3升级日记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线上Django项目python2到3升级日记相关的知识,希望对你有一定的参考价值。

这两天干了一个几斤疯狂的事情,花不到一个工作日的时间把一个线上Django项目语言版本从python2升级到Python3
1、字典的一个语法变化

Python2.7:

if dict1.haskey(key1):

Python3:

if key1 in dict1.keys():
# or
if key1 in dict1 :

2、u"strcontent"这种格式在python3里面支持,但是定义正则的ur"regexcontent"已经不支持,需要改成r"regexcontent"

3、urllib2不再支持,代替方式:

import urllib.request
resp=urllib.request.urlopen(http://www.baidu.com)
html=resp.read()
print(html)

4、HTMLParser包路径发生变化:

from html.parser import HTMLParser

5、HTMLParser的继承定制方式发生变化,初始化函数必须加上超类的初始化语句,否则会error:

object has no attribute ‘convert_charrefs‘
   def __init__(self):
        super().__init__()
        self.reset()
        self.images = []

6、StringIO新的import方式:

try:
    from StringIO import StringIO
except ImportError:
    from io import StringIO

7、Python3的异常类体系发生变化,主基类变为Exception,以前的StandardError下线,所以出错:NameError: name ‘StandardError‘ is not defined

8、Python3里面没有long类型,所有都是int,还有以前的那种数字后面加L的long类型定义方式L得去掉,否则报错
9、urlparse包路径改为urllib.parse,用法基本没变
10、整除法的计算机制改变了,非整除会变成小数,不会直接floor了。
11、Ubuntu下uwsgi执行环境由python2升级为python3的主要操作是apt卸载uwsgi-plugin-python,装上uwsgi-plugin-python3,当然了,还有python3版本的切换和一堆依赖的安装。

以上是关于线上Django项目python2到3升级日记的主要内容,如果未能解决你的问题,请参考以下文章

centos python2升级为python3 升级旧版本django

腾讯云python系列之部署Django流程

Django线上部署代码修改失效问题

“小爱”项目日记

在Centos6.8上为安装Django1.11.1升级Python2.6到Python3.5

白手起家Django项目发布中篇_Centos下Python2和3并存环境部署