首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python-2to3: Python 2和3的安全Fixers集

Python-2to3: Python 2和3的安全Fixers集
EN

Stack Overflow用户
提问于 2019-05-16 05:28:08
回答 2查看 399关注 0票数 1

Python 2to3修复器的哪个子集输出有效的Python 2代码?

与其一下子迁移到Python3,我更愿意使用2to3来完成大部分工作,将真正复杂的东西(例如,unicode更改)保存到以后,或者可能使用six来支持这两种方式。我希望由2to3完成初始遍历,但我希望它生成有效的Python2代码作为中间步骤。

注意:我知道a similar question,但它并没有得到真正的响应。

EN

回答 2

Stack Overflow用户

发布于 2019-11-13 09:35:27

我最近发现了一个工具futurize,它可以为您做这件事。在EPEL中,甚至有一个适用于CentOS 6的转速(我在工作中的一些机器上坚持使用它)-它是python-future

http://python-future.org/automatic_conversion.html -Stage1是“为Python3做准备,同时保持与现有包的兼容性”。我发现阶段2需要安装的其他包,但当我复制脚本时,这些包在其他机器上不可用。

一个例子:futurize -l -f all -f idioms -f ws_comma -x long *py

添加-w将为您写回更改。

票数 1
EN

Stack Overflow用户

发布于 2019-05-16 11:11:05

我不认为你会找到一个。你最好的方法是使用#!语法来指示您想要使用的Python,并在准备好每个Python时使用2to3。(如果您使用的是Windows,请查看Python launcher,以使共存变得更容易一些。)

我有一个我写的模块,需要同时使用2和3;我在顶部有如下代码:

代码语言:javascript
复制
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

散布在像这样的东西中:

代码语言:javascript
复制
if PYTHON2:
    f = stringio(self.XMLData)
if PYTHON3:
    f = bytesio(self.XMLData.encode(encoding="utf-8"))

这并不是说有一种方法可以表达在两个系统中都能工作的行。你需要像这样打很多补丁。这真的不值得,除非你有一个用例(像这样),因为某些原因,你必须在一个模块中同时支持Python2和Python3。

我的用例相对简单。您引用的similar question指向深入研究Python "Porting Code to Python 3 with 2to3" chapter,它显示了许多东西是不同的,其中许多内容是不兼容的,需要进行大量如上所述的条件编码。我不建议你这么做。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56157854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档