2010-04-26 5 views
2

Я должен делать что-то не так здесь ... Я сейчас пытаюсь проверить, находится ли ip в определенной подсети, используя встроенный модуль.python 3: модули ipaddr/netaddr

Я использую 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

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

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

3

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

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

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

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

Спасибо.

+0

Если в python 3.3 включен модуль «ipaddress», есть ли основания для поддержки библиотеки netaddr? Сообщение объяснения от вас будет полезно, чтобы понять, почему нужна другая библиотека. – Benny

2

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

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

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

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

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

Смежные вопросы