线上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版本的切换和一堆依赖的安装。
12、md5的update参数值需要encode以下:
md5.update(str1.encode('utf-8'))
13、属性和setter方法里面对实例值的定义名称不能和属性名称一样了,具体看下例中的下划线处理,如果不加那个处理,会导致stack overflow:
class Person(object):
def __init__(self, name, birthday):
self.name = name
self.birthday = birthday @property
def birthday(self):
return self._birthday @birthday.setter
def birthday(self, birthday):
self._birthday = str_to_date(birthday) @property
def age(self):
return datetime.date.today() - self.birthday def __str__(self):
return '%s,%s(%s)'%(self.name,self.birthday, self.age) person = Person('Xiao Ming','1980-10-1')
14、urllib.basejoin已经废除,用urllib.parse.urljoin代替
15、xrang全部统一成rang了
16、最后强调一下,所有的urllib.function的调用方式都已经废止,需要重新import相关新模块。
总结:修改点主要都在第三方不再维护的两个遗留库里面,特别廖雪峰的一个小lib,里面设计套路很深,用的都是传统的老api,最后实在移植成本太高,果断放弃,从pypi找了个同类的取代之。
线上Django项目python2到3升级日记的更多相关文章
- 线上服务器PHP版本编译安装升级全记录
		
1.将原来的PHP重命名一下 cd /usr/local/bin/ mv php php.2.9 2.安装依赖 yum install gcc gcc-c++ libxml2 libxml2-deve ...
 - eruda.js 实现线上调出控制台
		
<script src="//cdn.bootcss.com/eruda/1.3.0/eruda.min.js"></script> 调用 eruda.in ...
 - Django线上部署教程:腾讯云+Ubuntu+Django+Uwsgi(转载)
		
网站名称: 向东的笔记本 本文链接: https://www.eastnotes.com/post/29 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议.转载请注明出处! ...
 - Django项目在Linux服务器上部署和躺过的坑
		
引言 在各方的推荐下,领导让我在测试环境部署之前开发的测试数据预报平台.那么问题来了,既然要在服务器上部署, 就需要准备: 1.linux服务器配置 2.linux安装python环境搭建与配置 3. ...
 - django项目在uwsgi+nginx上部署遇到的坑
		
本文来自网易云社区 作者:王超 问题背景 django框架提供了一个开发调试使用的WSGIServer, 使用这个服务器可以很方便的开发web应用.但是 正式环境下却不建议使用这个服务器, 其性能.安 ...
 - 在PythonAnyWhere上部署Django项目
		
http://www.jianshu.com/p/91047e3a4ee9 将项目放到git上,然后将pathonanywhere上的ssh传到git上,没有的话先创建,然后从git上把项目拷贝到pa ...
 - kafka线上滚动升级方案记录
		
kafka升级方案 为什么进行kafka升级 一.修改unclean.leader.election.enabled默认值Kafka社区终于下定决心要把这个参数的默认值改成false,即不再允许出现u ...
 - 服务器上部署django项目流程?
		
1. 简单粗暴 项目开发完毕,在部署之前需要再配置文件中将 ALLOWED_HOSTS配置设置为:当前服务器IP或*,如: ALLOWED_HOSTS = ["*",] 然后将源码 ...
 - 基于Nginx和uWSGI在Ubuntu上部署Django项目
		
前言: 对于做Django web项目的童鞋,重要性不言而喻. 参考:https://www.cnblogs.com/alwaysInMe/p/9096565.html https://blog.cs ...
 
随机推荐
- java加载外部文件数据到代码中:外部数据文件放到jar包中,调用方法getResourceAsStream
			
任务要将数据文件geo.txt加载进行.因为是别人写的总体项目,不能乱动位置.只能将geo.txt打包到jar中某目录.比如,放到.class文件下怎么加载:http://riddickbryant. ...
 - 【linux学习笔记】Sublime Text3支持GB2312和GBK编码以及中文输入法
			
几天在ubuntu15.10下使用Sublime Text3发现中文乱码,以及不能使用中文输入法(搜狗输入法linux版)的问题,捣鼓了半天,终于完善了,下面po一下我的解决方案. 一.支持GB231 ...
 - UNIX环境高级编程——记录上锁(fcntl函数)以及死锁检测
			
一.记录锁 record locking 功能:当一个进程正在读或修改文件的某个部分时,它可以阻止其它进程修改同一文件区. 字节范围锁 byte-range locking 二.历史 flock函数, ...
 - Oracle Enterprise Linux 64-bit 下Oracle11g的监听配置修改及测试步骤
			
测试环境:Oracle Enterprise Linux 64-bit (5.8版本) + Oracle 11g 64位 相关说明: Oracle11g64位软件的安装位置为/u01/app/orac ...
 - Ubuntu安装JDK与环境变量配置
			
Ubuntu安装JDK与环境变量配置 一.getconf LONG_BIT 查看系统位数,并下载相应的jdk.我的系统是32位的,所以下载的jdk是:jdk-8u77-linux-i586.gz.并且 ...
 - python字典(dictionary)使用:基本函数code实例,字典的合并、排序、copy,函数中*args 和**kwargs做形参和实参
			
python字典dictionary几个不常用函数例子 一.字典声明 如,d={}; d= {'x':1,'b':2} d1 = dict(x=1,y=2,z=3) d2 = dict(a=3 ...
 - Java进阶(二十七)使用Dom4j解析XML文件
			
使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...
 - NSString/NSMutable字符串——韩俊强…
			
1.OC基本数据类型(简单铺垫) // NSInteger 在64 位下相当于long,在非64位下相当于 int: // CGFloat 在64位下相当于double 在非64位下相当 ...
 - python is not None
			
python 判空常用 XX is not None,但其实 not XX is None 也可以. http://stackoverflow.com/questions/2710940/pyth ...
 - Errors running builder 'Integrated External Tool Builder' on project xxx
			
出现这样的提示,表明你的项目的Builder项出了问题. 解决方法是: 右键项目选择"Properties",再选择"Builders",删除丢失的builde ...