3.4的IP地址模块的Python2.6后台端口
py2-ipaddress的Python项目详细描述
这是python 3.4ipaddress模块的python 2.6后台端口。
有关详细信息,请参阅official Python 3.4 documentation 在模块上。
来自python 3.4的ipaddress模块的更改
由于python 2没有不同的bytes类型,因此使用bytearray。 而不是“打包”地址表示。另外,因为 python 2.7的functools没有python 3.2的lru_cache, 不会对is_private和^{tt8}执行缓存$ 属性;这应该是python 3.3的一个小问题ipaddress 也没有使用lru_cache。后端口的行为应该相同 在所有其他方面。
Py2 IP地址3.4的更改
Python2.6支持和错误修复。
与Py2 IP地址2.0.1及更早版本的更改
因为python 2不区分bytes和strlike python 3有,版本2.0.1和更早的py2 ipaddress试图 将str参数解释为两者并做“正确”的事情。
不幸的是,这导致py2 ipaddress中出现了令人惊讶的行为:
>>> ipaddress.ip_address('test.example.org') IPv6Address('7465:7374:2e65:7861:6d70:6c65:2e6f:7267')
当然,ipaddress模块不执行dns解析。 相反,参数被解释为字节字符串(长度为16),并且 已将逐位转换为IPv6地址。在python 3中,ipaddress 正确地拒绝这样的构造函数参数(除非b前缀 用于将文本显式标记为字节字符串)。
更糟糕的是,并不总是有一个正确的解释。Python3 示例:
>>> ipaddress.ip_address('::1234:5678:9abc') IPv6Address('::1234:5678:9abc') >>> ipaddress.ip_address(b'::1234:5678:9abc') IPv6Address('3a3a:3132:3334:3a35:3637:383a:3961:6263')
在python 2中无法区分这两个调用。作为一个 结果,py2 ipaddress 3.4对所有字节字符串使用bytearray,并且 str仅用于文本字符串:
>>> ipaddress.ip_address('::1234:5678:9abc') IPv6Address('::1234:5678:9abc') >>> ipaddress.ip_address(b'::1234:5678:9abc') IPv6Address('::1234:5678:9abc') >>> ipaddress.ip_address(bytearray('::1234:5678:9abc')) IPv6Address('3a3a:3132:3334:3a35:3637:383a:3961:6263')
许可证
ipaddress模块(原始和此后台端口)已获得许可 在Python Software Foundation License version 2下面。
对Python2.6兼容性所做的修改在此发布到 作者的公共领域。