Python 3: модули ipaddr / netaddr - PullRequest
2 голосов
/ 26 апреля 2010

Я должен сделать что-то не так здесь ... В настоящее время я пытаюсь проверить, находится ли 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.

этот и другие поиски в 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'

Я чувствую себя довольно разочарованным, и я не уверен, куда идти отсюда ... предложения?

Ответы [ 3 ]

3 голосов
/ 28 апреля 2010

netaddr пока не поддерживает Python 3.x (как упомянуто в README).

Однако, это будет сделано в следующем выпуске (0.7.5). Я восприму это как намек на то, что мне следует поторопиться и вытащить это за дверь!

Я добавил тикет на трекер ошибок проекта здесь: -

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

Спасибо.

3 голосов
/ 26 апреля 2010

модуль ipaddr был добавлен в цикле разработки 3.1 (между альфа-2 и бета-1), но удален до первой версии кандидата 3.1. Он не является частью стандартной библиотеки какой-либо выпущенной версии Python. Вы все еще можете загрузить и установить его, например, с PyPI .

Ошибка netaddr кажется ошибкой в ​​самом netaddr. Он пытается обнаружить поддержку IPv6 и терпит неудачу. Я предполагаю, что это ошибка в модуле, но исправить или обойти ее сложнее.

2 голосов
/ 05 августа 2014

Модуль ipaddress включен в python 3.3, который является новой версией модуля ipaddr.

ipaddress обратно несовместим с модулем ipaddr, доступным в PyPI.

Основные отличия:

  • ipaddress * Сетевые классы эквивалентны ipaddr * Сетевые аналоги класса со строгим флагом, установленным в True.
  • ipaddress * Интерфейсные классы эквивалентны ipaddr * Сетевые аналоги класса со строгим флагом, установленным в False.
  • Фабричные функции в ipaddress были переименованы, чтобы избавиться от них из классов.
  • Несколько атрибутов были переименованы, чтобы также устранить их назначение. (например, сеть, адрес сети)
    • Ряд методов и функций, которые возвращали контейнеры в ipaddr, теперь возвращают итераторы. Это включает подсети, address_exclude, sumrize_address_range и collapse_address_list.

Для получения дополнительной информации см. PEP-3144 .

...