跳转到主要内容

编写一个在Python 2和Python 3上都能运行的程序的最简单方法。

项目描述

Pies

PyPI version PyPi downloads Build Status License Bitdeli Badge

编写一个在Python 2.6+和Python 3上都能运行的程序的最简单(也是最美味)的方法。

让我们来尝一尝派!

安装pies

pip install pies

或者如果你更喜欢

easy_install pies

概述

Pies是一个Python2 & 3兼容层,其理念是所有代码都应该是Python3代码。从这个观点出发意味着当在Python3上运行时,pies几乎不会增加任何开销。

而不是提供一大堆自定义方法(导致在任何版本上看起来都不合适的Python代码),pies旨在将尽可能多的Python3 API调用、导入和对象回移植到Python2 - 只在绝对必要时才依赖特殊语法。

pies与six有何不同?

与六个相比,pies 显著更小、更简单,因为它假设对于所有可能的情况,开发者都在使用 Python 2.6+ 及以上版本中包含的与 Python 3 兼容的版本,而 six 则试图与 Python 2.4 保持兼容性,导致大量覆盖和更深入的差异。此外,如上所述,pies 尽可能地让您不需要更改语法。

将 pies 集成到您的项目中

将 pies 集成到现有的 Python 3+ 代码库中(以实现 Python 2 和 3 的双版本支持)非常简单

from __future__ import absolute_import, division, print_function, unicode_literals

from pies.overrides import *

然后只需编写标准的 Python3 代码,并享受 Python2 支持。

无需修改即可使用(优点)

Pies 最好的部分是 Python3 代码在 Python2 中如何无需修改即可运行

函数

  • round

  • next

  • filter

  • map

  • zip

  • input

  • range

类型

  • object(str 在 Python 的所有版本上都具有正确的行为)

  • chr(在 Python2 中创建一个 unichr 对象)

  • str(在 Python2 中创建一个 unicode 对象)

  • dict(使用 dict() 创建字典将获得所有特殊的 Python3 itemview 结果,但使用 {} 则不会)

导入

  • html

  • http

  • xmlrpc

  • _thread

  • builtins

  • configparser

  • copyreg

  • queue

  • reprlib

  • socketserver

  • ipaddress

  • argparse

  • enum(也添加了此库到 Python 3.0-3.3)

不同的导入(缺点)

一些 Python3 模块与它们的 Python2 对应物相比变动很大,因此我发现在两个环境中获得 Python3 命名是有必要的。由于这些模块已在 Python2 中存在,因此无法直接通过 Python3 模块名导入它们。相反,您必须从 pies 中导入这些模块。

示例

from pies import pickle

完整列表

  • dbm

  • urllib

  • collections

  • functools

  • imp

  • itertools

  • pickle

  • StringIO

  • sys

  • unittest

特殊语法(缺点)

遗憾的是,仍然存在针对特殊情况的特殊语法。

  • PY2 - 如果在 Python2 中运行则为 True

  • PY3 - 如果在 Python3 中运行则为 True

  • u('text') - 应该替换 u'text' 以方便将代码从 Python2 迁移

  • itemsview(collection) - 应该替换 collection.iteritems(),其中您无法控制传入的集合

  • valuesview(collection) - 应该替换 collection.values(),其中您无法控制传入的集合

  • keysview(collection) - 应该替换 collection.keys(),其中您无法控制传入的集合

  • execute() - 在两个环境中启用 Python 3 风格的 exec 语句。

  • integer_types - 可能希望使用 isinstance(variable, integer_types) 而不是 type(variable, int),因为在 Python2 中长值将不会匹配 int。

  • NewClass(with_metaclass(metaclass, parent_class)) - 应该替换 “metaclass = metaclass” 和 “NewClass(metaclass=metaclass)” 作为分配元类的方式。

可以改进什么?

我非常确信有很多可以改进的地方。如果您遇到任何问题或有任何想法,请毫不犹豫地提交错误报告、提交拉取请求或通过电子邮件与我联系timothy.crosley@gmail.com


感谢您,希望您喜欢 pies!

~Timothy Crosley

项目详情


下载文件

下载您平台对应的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。

源分发

pies-2.6.7.tar.gz (8.6 kB 查看哈希值)

上传时间

构建分发

pies-2.6.7-py2.py3-none-any.whl (15.9 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持