spider和python的关系_Spider163同时支持python2.x和python3.x的演进之路

原标题:Spider163同时支持python2.x和python3.x的演进之路

在去年上半年,笔者还信誓旦旦地说:

“python3.x不支持了,因为历史原因本项目用的python2.x开发,迁到python3.x的改动有点繁琐,索性一直python2.x好了。”

那时候说这话,对python社区还不是很了解,自然也不清楚python3.x才是“人类大趋势”,故而有些懒惰。(很多流行开源库已经抛弃python2.x了)

截止到2017年年底,Spider163从一款最初只是为了抓取网易云音乐热评的工具,演进增加了抓取歌词、下载会员歌曲等功能,并对很多基础功能做了很多底层优化,还增加了一个算得上可以用的WEB UI。

在这些功能做到稍微不错的用户体验的时候,迁移到python3.x来到了Spider163开发计划的靠前位置。

结论是:

2018年1月14日,Spider163从2.6.3直接更新至2.7.0,完成兼容python2.x和python3.x的里程碑意义的工作。

这算不上是新功能的更新,纯粹是让用户使用上更方便,python3.x下也许会有一些未测试的bug,希望大家遇到问题在GitHub上提issue,我会在一周内回复。

Github地址:https://github.com/Chengyumeng/spider163

因为算不上功能性的更新,接下来就介绍下主要改变的地方吧。

判断python版本

sys包内有一个version的变量,可以通过该变量判别python版本,例如,在我的python 3环境下,该变量的值为:

3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04) n[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]

语法更新

有一些代码格式在python 2.x中支持两种写法,在python 3.x中删除了某一种过于随意的表达方式,对于这种情况,主要操作就是检查代码,去掉不符合python 3.x的语法表达。

例如,在python2中,下列代码是合法的:

for i in range(9.0):

print(i)

解释器会对float变量隐式转换为整型,而在python3.x中就必须显示类型转换,需要写成:

for i in range(int(9.0)):

print(i)

相同的例子还发生在str类型和byte类型的变量合并的情形下,在python 2.x中,下面语法是可接受的:

b'a' + 'b'

但是在python3.x中就是有问题的。

……

凡此种种都需要改进。

考虑到spider163底层全都是文本处理和加密解密操作,因此会面对很多python的兼容性问题,因此编写了很多工具性函数统一处理。

库的不兼容

有一些第三方库,只有python2.x的库,升级python3.x就要换库了,比较常见的例子就是mysql的库,为此要根据Python的版本,安装对应的库,这种需要在setup.py中设计。

还有一些系统库,在python2.x升级到python3.x的时候,为统一命名风格改换了名字,比较常见的是configparser这个库,在python2.x和Python3.x中的命名就是不同的,为此我采用如下手段兼容:

if version.PYTHON3 is True:

import configparser as ConfigParser

else:

import ConfigParser

以上就是spider163从2.6.3到2.7.0的升级之路,欢迎大家pip install Spider163使用,抑或关注公众账号:程天写代码交流。

↓阅读原文了解项目返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值