融合python2和python3
很多情况下你可能会想要开发一个程序能同时在python2和python3中运行。
想象一下你开发了一个模块,成百上千的人都在使用它,但不是所有的用户都同时使用python 2和3。这种情况下你有两个选择。第一种情况,你可以讲2种模块分开,分别为python2和python3开发一个。另一种情况就是,你可以修改你现有的代码,使其同时支持python2和python3。
今天我们来讲一些方法使你的代码能同时兼容它们。
Future import
首先,也是最重要的的方法即是__future__模块的导入。它使你能在python2中引入python3的功能模块。下面举例说明:
上下文管理器是python2.6+中的新特新,假如你要在python2.5中使用它:
from __future__ import with_statement
python2中的print语法在python3中变成了print()函数,如果你想要在python2中使用print()函数,你可以从__future__模块中引入它:
# Output: from __future__ import print_function
print(print)
# Output: <built-in function print>
解决模块重命名:
首先,告诉我在你的代码中你是怎样引入包的呢?大部分应该是这样的:
import foo
# or
from foo import bar
那你是否有尝试过,其实你可以这样做:
import foo as foo
其实这两者的效果是一样的,但是要使你的代码兼容python2和python3这是至关重要的,因为你可以这样做:
try:
import urllib.request as urllib_request # for Python 3
except ImportError:
import urllib2 as urllib_request # for Python 2
所以让我来解释一下上面的代码,我们使用try/except语句包住了我们的引入代码。我们这么做是因为在python2中没有urllib.request模块所以它会产生一个ImportError。其中python3中的urllib.request模块的内容和python2中的urllib2是一样的。所以通过以上代码在python3中我们会引入urllib.request而在python2中我们会引入urllib2,而且都是通过别名urllib_request调用。
一些废弃的python2内置
另外一些要记住的就是,在python3中已经移除的12中python2中的内置功能。切记不要在python2中使用它们如果你要你的python2代码同时兼容python3的话。下面这个方法能强制你不能使用这12个废弃的方法:
from future.builtins.disabled import *
现在,无论何时你想要使用这些废弃的模块,都会引起NameError错误:
from future.builtins.disabled import * apply()
# Output: NameError: obsolete Python 2 builtin apply is disabled
非标准库的安装
这有一些第三方的库让你在python2中可以使用python3的方法:
- enum
pip install enum34 - singledispatch
pip install singledispatch - pathlib
pip install pathlib
进一步阅读,在python文档 comprehensive guide中有更加详细的说明使你的代码能同时兼容python2和python3。
原文地址:http://book.pythontips.com/en/latest/targeting_python_2_3.html
欢迎多来访问博客:http://liqiongyu.com/blog
微信公众号:
融合python2和python3的更多相关文章
- python2迁移python3的问题
▌使用 pathlib 模块来更好地处理路径 pathlib 是 Python 3默认的用于处理数据路径的模块,它能够帮助我们避免使用大量的 os.path.joins语句: from pathlib ...
- python2 与 python3 urllib的互相对应关系
urllib Python2 name Python3 nameurllib.urlopen() Deprecated. See urllib.request.urlopen() which mirr ...
- 在同一台电脑上同时安装Python2和Python3
目前Python的两个版本Python2和Python3同时存在,且这两个版本同时在更新与维护. 到底是选择Python2还是选择Python3,取决于当前要使用的库.框架支持哪个版本. 例如:HTM ...
- python2与python3在windows下共存
python有python2(工业版)和python3,有时候我们会希望电脑上既有python2也有python3,!假设我们已经安装好,python2和python3了, 接下来我们找到python ...
- Python2.7<-------->Python3.x
版本差异 from __future__ Python2.7 Python3.x 除法 / // Unicode u'' ...
- 同时使用python2和Python3
问题:thrift生成的是python2代码,之前使用的是Python3因此需要同时使用两个版本. 方案:将python3的可执行文件重命名为python3(默认为Python),这样使用pyhton ...
- python2 到 python3 转换工具 2to3
windows系统下的使用方法: (1)将python安装包下的Tools/Scripts下面的2to3.py拷贝到需要转换文件目录中. (2)dos切换到需要转换的文件目录下,运行命令2to3.py ...
- windows下同时安装python2与python3
由于python2与python3并不相互兼容,并且差别较大,所以有时需要同时安装,但在操作命令行时,怎么区别python2与python3呢? 1.下载并安装Python 2.7.9和Python ...
- 爬虫入门---Python2和Python3的不同
Python强大的功能使得在写爬虫的时候显得十分的简单,但是Python2和Python3在这方面有了很多区别. 本人刚入门爬虫,所以先写一点小的不同. 以爬取韩寒的一篇博客为例子: 在Python2 ...
随机推荐
- codeforces 401D. Roman and Numbers 数位dp
题目链接 给出一个<1e18的数, 求将他的各个位的数字交换后, 能整除m的数的个数. 用状态压缩记录哪个位置的数字已经被使用了, 具体看代码. #include<bits/stdc++. ...
- MacOS copy图标shell脚本
不会shell 同学做的... 可以看见在当前文件夹下创建了一个icons文件夹 最后还压缩了文件夹 #!/bin/bash # readPlist [plist] [key] function r ...
- 删除windows7保留分区
在系统里以管理员运行CMD.exe键入diskpartsel disk 0 (select 选择硬盘)list vol (查看卷)sel vol 0 (选择卷,0为保留分区)inactive ( ...
- 修改Eclipse的WorkSpace保持数[转载]
最近用Eclipse开发特别多,我个人习惯每一个项目一个WorkSpace,这样的话代码干净.而且当项目之前编码规范不一样时,也不会彼此影响.但项目一多,Eclipse默认只保存5个WorkSpace ...
- 宣布正式发布 Windows Azure Notification Hub,新增 SQL Server AlwaysOn 可用性组侦听器支持
今天,我们非常高兴地宣布,针对使用 Windows Azure 的移动和企业开发人员推出一些新功能.这些新功能可以减少构建移动应用程序的开发时间和成本,并能帮助企业开发人员实现高可用性和全球业务连续性 ...
- delphi调用外部程序打开文件
delphi调用外部程序打开文件 ShellExecute的各种用法 一.利用系统默认的邮件收发器发送电子邮件 Uses ..., ShellAPI; Var lpHwnd: HWND; lpOper ...
- java类的结构(属性、方法、构造函数)
一.类的定义形式类定义的一般形式如下 [类定义修饰符] class <类名> { //类体 [成员变量声明] [构造函数] [成员方法] } 前面说过,在描述java语法时,方括号中 ...
- BootStrap 智能表单系列 二 BootStrap支持的类型简介
代码如下(链接地址:https://github.com/xiexingen/Bootstrap-SmartForm/blob/master/demo/form1-basic.html): <! ...
- java读取配置文件的几种方法
java读取配置文件的几种方法 原文地址:http://hbcui1984.iteye.com/blog/56496 在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配 ...
- Set 与 Multiset
Set 与 Multiset 会根据待定的排序准则,自动将元素排序,两者不同之处在于前者不允许元素重复,后者允许,下面介绍一下set中的函数: 一.set 中的 begin.end.rbegin.re ...