跳转到主要内容

Python 2的3次幂。一个轻量级移植辅助库。

项目描述

Eight是一个Python模块,提供了一个简洁的兼容层,用于在Python 3和2之间。Eight允许您为Python 3.3+编写代码,同时提供与Python 2.7的有限兼容性,无需代码更改。Eight受到了sixninepython-future的启发,但提供了更好的国际化(i18n)支持,更轻量级,更易于使用,并且明确偏向于Python 3代码:如果您从代码中移除eight,它将继续像在Python 3上使用eight时那样正常工作。

要编写可移植到Python 2的Python 3代码,您可能还想阅读Armin Ronacher的优秀的Python 3移植指南,以及官方的移植指南

在Python 3中,将from eight import *写入代码是一个空操作。在Python 2中,它将许多Python 3的名称绑定到它们的Python 2等效名称。此外,如果您需要导入在Python 3中被重命名的模块或模块成员,则写入from eight import <module>将执行正确的操作(在Python 3中相当于import <module>,在Python 2中相当于import <old_name> as <module>)。最后,eight可以选择性地包装您的标准流和环境变量I/O以使用文本,而不是字节(见下文)。

安装

pip install eight

概述

from eight import *
from eight import queue
from eight.collections import UserList, deque

如果您使用print、除法、非ASCII文本书面语或相对导入,您还应在每个源文件顶部添加此未来导入

from __future__ import (print_function, division, unicode_literals, absolute_import)

包装stdio

Eight提供了对sys.stdinsys.stdoutsys.stderr的包装,以使它们(以及使用它们的方法)表现得像在Python 3中一样。具体来说,在Python 3中,这些流接受文本数据,它们的.buffer属性引用接受字节的底层流。Eight使用io模块为您完成此操作,但为sys.stdoutsys.stderrTextIOWrapper类子类化以在Python 2上将非Unicode输入强制转换为Unicode(否则,由于Python 2的语义,异常打印等将停止工作)。

要启用stdio包装,请使用以下内容

import eight
eight.wrap_stdio()

要撤销对任何流的此操作的效果,请使用detach方法,例如sys.stdin = sys.stdin.detach()(但请记住,在eight.USING_PYTHON2上对此进行条件判断)。有关更多信息,请参阅io模块文档

解码命令行参数

Eight提供了一个实用函数来解码Python 2中sys.argv的内容(就像Python 3所做的那样)。它使用sys.stdin.encoding作为编码来执行此操作

import eight
eight.decode_command_line_args()

decode_command_line_args()的调用用其解码后的内容替换sys.argv并返回新内容。在Python 3中,此调用是一个空操作(它返回sys.argv并保持其不变)。

包装环境变量获取器和设置器

Eight提供了一些实用包装器,以帮助将Python 2的环境变量访问和分配与Python 3保持一致:将输入编码到os.putenv(用于例如os.environ[x] = y的语句)和解码os.getenv的输出(用于x = os.environ[y])。使用wrap_os_environ_io()将这些包装器猴子修补到os模块中

import eight
eight.wrap_os_environ_io()

在Python 3中,此调用是一个空操作。

从自助餐中选择

您可以通过运行IPython并输入import eight,然后输入eight.<TAB>来查看from eight import *将执行什么操作。以下是完整的可用列表

  • ascii

  • bytes

  • chr

  • filter

  • hex

  • input

  • int

  • map

  • oct

  • open

  • range

  • round

  • str

  • super

  • zip

您可以通过明确列出它们来导入这些符号。如果出于任何原因您发现导入所有这些有问题(这是推荐的),当然可以导入子集。

除了通过 from eight import * 导入的名称外,以下模块也可用,并在需要时使用 from eight import <name> 按名称导入。

  • queue(旧名称:Queue

  • builtins(旧名称:__builtin__

  • copyreg(旧名称:copy_reg

  • configparser(旧名称:ConfigParser

  • reprlib(旧名称:repr

  • winreg(旧名称:_winreg

  • _thread(旧名称:thread

  • _dummy_thread(旧名称:dummy_thread

以下模块具有在 Python 2 中位于其他位置的属性:待办事项

致谢

Python-future 用于进行大量 Python 3 功能的向后移植。

许可证

根据 Apache 许可证第 2 版 许可。

https://img.shields.io/travis/kislyuk/eight.svg https://codecov.io/github/kislyuk/eight/coverage.svg?branch=master https://img.shields.io/pypi/v/eight.svg https://img.shields.io/pypi/l/eight.svg https://readthedocs.org/projects/eight/badge/?version=latest

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。

源分发

eight-1.0.1.tar.gz (11.0 kB 查看散列

上传时间

构建分发

eight-1.0.1-py2.py3-none-any.whl (10.4 kB 查看散列

上传时间 Python 2 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面