Python-2to3:Python2和Python3的安全修复程序集
Python2to3修复程序的哪个子集输出有效的Python2代码 我不想一下子就转到Python3,而是希望使用2to3来实现这一点,将真正棘手的事情(例如unicode更改)留到以后再做,或者可能使用Python-2to3:Python2和Python3的安全修复程序集,python,python-2to3,Python,Python 2to3,Python2to3修复程序的哪个子集输出有效的Python2代码 我不想一下子就转到Python3,而是希望使用2to3来实现这一点,将真正棘手的事情(例如unicode更改)留到以后再做,或者可能使用six来支持这两种功能。我希望初始过程由2to3完成,但我希望它生成有效的Python2代码作为中间步骤 注意:我知道,但它没有得到真正的回答。我想你找不到答案。你最好的方法是使用#!语法指示要使用的Python,并在准备好使用每种Python时使用2to3。(如果您使用的是Windows,请查
six
来支持这两种功能。我希望初始过程由2to3
完成,但我希望它生成有效的Python2代码作为中间步骤
注意:我知道,但它没有得到真正的回答。我想你找不到答案。你最好的方法是使用#!语法指示要使用的Python,并在准备好使用每种Python时使用2to3。(如果您使用的是Windows,请查看以简化共存。) 我有一个我写的模块,需要与2和3一起工作;我在顶部有这样的代码:
import sys
PYTHON3 = sys.version_info.major == 3
PYTHON2 = sys.version_info.major == 2
if PYTHON2:
import StringIO
stringio = StringIO.StringIO
bytesio = StringIO.StringIO # In Python2, stringIO takes strings of binary data
import urllib2
URL_open = urllib2.urlopen
HTTPError = urllib2.HTTPError
if PYTHON3:
import io
stringio = io.StringIO
bytesio = io.BytesIO # In Python3, use BytesIO for binary data
import urllib.request
URL_open = urllib.request.urlopen
import urllib.error
HTTPError = urllib.error.HTTPError
分散在以下各个方面:
if PYTHON2:
f = stringio(self.XMLData)
if PYTHON3:
f = bytesio(self.XMLData.encode(encoding="utf-8"))
这并不是说有一种表达方式可以在两种系统中都起作用。你需要很多这样的补丁。除非你有一个用例(像这样),你必须在一个模块中同时支持Python2和Python3
我的用例相对简单。您所指的内容指向深入Python,它显示了有多少内容是不同的,其中许多内容是不兼容的,需要大量的条件编码,如上所述。我不推荐。我想你找不到。你最好的方法是使用#!语法指示要使用的Python,并在准备好使用每种Python时使用2to3。(如果您使用的是Windows,请查看以简化共存。) 我有一个我写的模块,需要与2和3一起工作;我在顶部有这样的代码:
import sys
PYTHON3 = sys.version_info.major == 3
PYTHON2 = sys.version_info.major == 2
if PYTHON2:
import StringIO
stringio = StringIO.StringIO
bytesio = StringIO.StringIO # In Python2, stringIO takes strings of binary data
import urllib2
URL_open = urllib2.urlopen
HTTPError = urllib2.HTTPError
if PYTHON3:
import io
stringio = io.StringIO
bytesio = io.BytesIO # In Python3, use BytesIO for binary data
import urllib.request
URL_open = urllib.request.urlopen
import urllib.error
HTTPError = urllib.error.HTTPError
分散在以下各个方面:
if PYTHON2:
f = stringio(self.XMLData)
if PYTHON3:
f = bytesio(self.XMLData.encode(encoding="utf-8"))
这并不是说有一种表达方式可以在两种系统中都起作用。你需要很多这样的补丁。除非你有一个用例(像这样),你必须在一个模块中同时支持Python2和Python3
我的用例相对简单。您所指的内容指向深入Python,它显示了有多少内容是不同的,其中许多内容是不兼容的,需要大量的条件编码,如上所述。我不推荐它。我最近发现了一个工具
futurize
,可以为您实现这一点。在EPEL中,CentOS 6甚至有一个RPM(我在一些工作机器上一直使用它)——它是python未来的
-阶段1是“为python 3做准备,同时保持与库存包的兼容性”。我发现第2阶段需要安装其他软件包,但在复制脚本时,其他机器上不可用
一个例子:
futurize-l-f all-f成语-f ws_逗号-x长*py
添加-w
将为您写回更改。我最近发现了一个工具futurize
,可以为您做这项工作。在EPEL中,CentOS 6甚至有一个RPM(我在一些工作机器上一直使用它)——它是python未来的
-阶段1是“为python 3做准备,同时保持与库存包的兼容性”。我发现第2阶段需要安装其他软件包,但在复制脚本时,其他机器上不可用
一个例子:
futurize-l-f all-f成语-f ws_逗号-x长*py
添加-w
将为您写回更改