python 3:ipaddr/netaddr模块

2024-04-28 19:57:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我一定是做错了什么。。。我目前正在尝试使用内置模块验证ip是否在特定子网中。

我正在使用activepython:

ActivePython 3.1.2.3 (ActiveState Software Inc.) based on
Python 3.1.2 (r312:79147, Mar 22 2010, 12:20:29) [MSC v.1500 32 bit (Intel)] on win32

在变更日志中有这个:

Python News
(editors: check NEWS.help for information about editing NEWS using ReST.)

What's New in Python 3.1.2?
Release date: 2010-03-20

----- snip -----

Removed the ipaddr module. 
Issue #3613: base64.{encode,decode}string are now called 
System Message: WARNING/2 (, line 706)

----- snip -----

Issue #3959: The ipaddr module has been added to the standard library. Contributed by Google.

这和其他谷歌搜索让我相信ipaddr是内置的,但是:

>>> import ipaddr
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named ipaddr
>>> from ipaddr import *
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named ipaddr

所以我想我会安装netaddr并尝试使用它,我从netaddr得到的只有:

>>> import netaddr
Traceback (most recent call last):
  File "", line 1, in 
  File "C:\Python31\lib\site-packages\netaddr\__init__.py", line 18, in 
    from netaddr.ip import IPAddress, IPNetwork, IPRange, all_matching_cidrs, \
  File "C:\Python31\lib\site-packages\netaddr\ip\__init__.py", line 1877, in 
    IPV6_LOOPBACK = IPAddress('::1')
  File "C:\Python31\lib\site-packages\netaddr\ip\__init__.py", line 262, in __init__
    self.value = addr
  File "C:\Python31\lib\site-packages\netaddr\ip\__init__.py", line 292, in _set_value
    % value)
netaddr.core.AddrFormatError: failed to detect IP version: '::1'

我感到相当沮丧,我不知道从这里去哪里。。。建议?


Tags: inpyimportipinitlibpackagesline
4条回答

netaddr还不支持Python3.x(如自述文件中所述)。

但是,它将在即将发布的版本(0.7.5)中实现。我会把这个当作一个暗示,我应该快点把它弄出去!

我在这里添加了一个项目错误跟踪器的票证:

http://code.google.com/p/netaddr/issues/detail?id=55

谢谢。

ipaddr模块是在3.1开发周期(alpha 2和beta 1之间)中添加的,但在3.1的第一个候选版本之前删除。它不是任何发布的Python版本的标准库的一部分。您仍然可以从PyPI下载并安装它。

netaddr失败似乎是netaddr本身的一个错误。它尝试检测IPv6支持并失败。我猜这是模块中的一个bug,但修复或解决方法很难猜测。

模块ipaddress包含在python 3.3中,python3.3是ipaddr模块的新版本。

ipaddress与PyPI上可用的ipaddr模块向后不兼容。

主要区别在于:

  • ipaddress*网络类与严格标志设置为True的ipaddr*网络类对等。
  • ipaddress*接口类与严格标志设置为False的ipaddr*网络类对等。
  • ipaddress中的工厂函数被重命名,以消除它们与类之间的歧义。
  • 一些属性也被重命名以消除其用途的歧义。(如网络、网络地址)
    • 在ipaddr中返回容器的许多方法和函数现在返回迭代器。这包括子网、地址排除、汇总地址范围和折叠地址列表。

有关详细信息,请参见PEP-3144

netaddr还不支持Python3.x(如自述文件中所述)。

但是,它将在即将发布的版本(0.7.5)中实现。我会把这当作一个暗示,我应该快点把它弄出去!

我在这里添加了一个项目错误跟踪器的票证:

http://code.google.com/p/netaddr/issues/detail?id=55

谢谢。

相关问题 更多 >