让你的python程序同时兼容python2和python3

python邮件列表里有人发表言论说「python3在10内都无法普及」。在我看来这样的观点有些过于悲观,python3和python2虽然不兼容,但他们之间差别并没很多人想像的那么大。你只需要对自己的代码稍微做些修改就可以很好的同时支持python2和python3的。下面我将简要的介绍一下如何让自己的python代码如何同时支持python2和python3。
放弃python 2.6之前的python版本
python 2.6之前的python版本缺少一些新特性,会给你的迁移工作带来不少麻烦。如果不是迫不得已还是放弃对之前版本的支持吧。
使用2to3工具对代码检查
2to3是python自带的一个代码转换工具,可以将python2的代码自动转换为python3的代码。当然,不幸的是转换出的代码并没有对python2的兼容做任何的处理。所以我们并不真正使用2to3转换出的代码。执行2to3 t.py查看输出信息,并修正相关问题。
使用python -3执行python程序
2to3可以检查出很多python2&3的兼容性问题,但也有很多问题是2to3发现不了的。在加上-3参数后,程序在运行时会在控制台上将python2和python3不一致,同时2to3无法处理的问题提示出来。比如python3和python2中对除法的处理规则做过改变。使用-3参数执行4/2将提示DeprecationWarning: classic int division。
from __future__ import
「from __future__ import」后即可使使用python的未来特性了。python的完整future特性可见__future__。python3中所有字元都变成了unicode。在python2中unicode字元在定义时需要在字元前面加u,但在3中则不需要家u,而且在加u后程序会无法编译通过。为了解决该问题可以「from future import unicode_literals」,这样python2中字元的行为将和python3中保持一致,python2中定义普通字元将自动识别为unicode。
import问题
python3中「少」了很多python2的包,在大多情况下这些包之是改了个名字而已。我们可以在import的时候对这些问题进行处理。
try:#python2
from UserDict import UserDict
#建议按照python3的名字进行import
from UserDict import DictMixin as MutableMapping
except ImportError:#python3
from collections import UserDict
from collections import MutableMapping
使用python3的方式写程序
python2中print是关键字,到了python3中print变成了函数。事实上在python2.6中已经带了print函数,所以对print你直接按照2to3中给出的提示改为新写法即可。在python3中对异常的处理做了些变化,这个和print类似,直接按照2to3中的提示修改即可。
检查当前运行的python版本
有时候你或许必须为python2和python3写不同的代码,你可以用下面的代码检查当前系统的python版本。
import sys
if sys.version > ‘3‘:
PY3 = True
else:
PY3 = False
six
six提供了一些简单的工具用来封装Python 2和Python 3之间的差异性。我并不太推荐使用six。如果不需要支持python2.6之前的python版本,即使不用six也是比较容易处理兼容性问题的。使用six会让你的代码更像python2而不是python3。
python3的普及需要每位pythoner的推动,或许你还无法立即升级到python3,但请现在就开始写兼容python3的代码,并在条件成熟时升级到python3。
如果本站有帮助到您,请不吝于给一个赞鼓励!

时间: 2024-10-07 03:59:31

让你的python程序同时兼容python2和python3的相关文章

python环境搭建(python2和python3共存)

安装两个版本的意义 验证自己代码对版本的兼容性 网上下载的某些源码只能在python2或者python3中运行 安装过程记录 1.去python官网下载python的安装包, 下载完成后如下图所示 2.开始安装 这一步并没有好说的,选择自己安装的路径.这里推荐选择C盘或者D盘的根目录便于查找 注意一点是其中有一个选项是ADD TO PATH,请先不要勾选 3.配置环境变量 配置环境变量的意义在哪里呢?举个例子,比如你要打开QQ,从本质上来说你要到QQ的安装目录去运行,但是平时我们在桌面都有个快捷

Python笔记一(Python2与Python3的区别)

一.Python2与Python3区别 Python2:源码重复,不规范 Python3:整合源码,更清晰简单优美 1.默认编码格式不同 python2:默认编码ascii 修改编码格式,可以在第一行加#  -*-  encoding:utf-8  -*- python3:默认编码utf-8 指定解释器: #!/user/bin/env python 原文地址:https://www.cnblogs.com/xingye-mdd/p/8729254.html

Python - Python2与Python3的对比、转换与兼容

对比 Python2.x与Python3.x版本区别:http://www.runoob.com/python/python-2x-3x.html 示例解读Python2和Python3之间的主要差异:https://www.oschina.net/news/99235/difference-between-python2-and-python-3 13个python3才能用的特性:https://mp.weixin.qq.com/s/eYeY2lcaPCsIIFOyZ6v-OQ 特别注意: 在

python2和python3同时存在如何安装和使用pip

linux下 如果没有pip则需要安装pip python2安装pip sudo apt install python-pip1如果是python3,则如下: sudo apt install python3-pip1此时python2和python3同时有pip, 使用pip时如下: python2: python2 -m pip install XXX1python3: python3 -m pip install XXX1同上,对于windows下,如果没有pip则要先安装,相对linux

Python2与Python3的区别:

前言:目前python两个版本Python2与Python3同时存在,并且这两个版本都在维护更新,但是Python2应该在2020年就停止维护更新了,那么到底选择Python2还是Python3,这个要取决于当前的要使用的库.框架支持哪个版本.现在做一下Python2与Python3的区别: 1.  性能:Py3起始比Py2的效率低,但是Py3具有极大的优化空间,效率正在追赶 2.  编码:Py3原码文件默认使用utf-8编码,使得变量名更为广阔 3.  语法: 1>  Py3去除了<>

创建Python2和Python3的虚拟环境

一.windows上安装 1.安装python 分别安装了Python2和Python3 python3.7默认安装目录 C:\Users\Administrator\AppData\Local\Programs\Python\Python37 安装目录里的python.exe,pip.py自定是否修改 2.安装virtualenv和virtualenvwrapper-win pip2 install virtualenv2 -i https://pypi.douban.com/simple p

selenium+python自动化81-html报告优化(饼图+失败重跑+兼容python2&amp;3)【转载】

优化html报告 为了满足小伙伴的各种变态需求,为了装逼提升逼格,为了让报告更加高大上,测试报告做了以下优化: 测试报告中文显示,优化一些断言失败正文乱码问题 新增错误和失败截图,展示到html报告里 优化点击截图放大不清晰问题 增加饼图统计 失败后重试功能 兼容python2.x 和3.x 报告效果 1.生成的测试报告效果如下图,默认展示报错和异常的用例,失败重试的用例结果也会统计进去. 2.点击显示截图,可以直接显示截取的图片,无需保存到本地 table表格 1.修改表格的td后面内容,可以

python技巧31[移植python2.x到3.x]

我们都知道python从2.x升级到3.x的过程中有一些不兼容的改动,但是有时还我们不得不将2.x的程序升级到3.x. 主要不兼容如下图: 移植过程: 1) 确保存在的代码有足够的测试覆盖.从2.x到3.x的升级工作量并不是很大,但是包含了很多的微小的不兼容,必须通过测试来确保升级后的程序仍然保持原有的功能.完全的测试覆盖不是被建议的,但是确实是需要的. 2) 用python 2.6 的 -3 命令行选项来运行程序,从而发现和去除明显的不兼容问题. 3) 使用2to3转化工具来自动地将程序转化为

python程序打包,来源于知乎(已验证)

百度经验方法:https://jingyan.baidu.com/article/22a299b5ec76869e19376ad9.html pandas导包问题解决方案: 修改原有的打包代码为: pyinstaller -F -w -i xxx.ico yyy.py --hidden-import=pandas._libs.tslibs.timedeltas 1 -F 指只生成一个exe文件,不生成其他dll文件 -w 不弹出命令行窗口 -i 设定程序图标 ,其后面的ico文件就是程序图标 y