Ошибка импорта модулей Python

Очень странно для меня:

# uname -a
Linux localhost.localdomain 2.6.18-194.3.1.el5 #1 SMP Thu May 13 13:09:10 EDT 2010 i686 i686 i386 GNU/Linux
# pwd
/root
# python
Python 2.6.5 (r265:79063, Apr 11 2010, 22:34:44)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import dns
>>>
[3]+  Stopped                 python
# cd /home/user/dev/dns
[root@localhost dns]# python
Python 2.6.5 (r265:79063, Apr 11 2010, 22:34:44)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import dns
Traceback (most recent call last):
  File "", line 1, in 
  File "dns.py", line 1, in 
    import dns.resolver
ImportError: No module named resolver
>>>
[4]+  Stopped                 python
#

Резюме: я не могу импортировать один и тот же модуль python с другого пути. Любые идеи? 0_o

P.S. SELINUX = отключено


person ololo    schedule 23.05.2010    source источник


Ответы (1)


Что dns.__file__ в первом случае? Я подозреваю, что это не исходит из каталога, который вы cd добавили во второй раз (текущий каталог при запуске Python идет впереди sys.path), а скорее из пакета, содержащего этот критический модуль resolver, который второй похоже, не хватает.

person Alex Martelli    schedule 23.05.2010
comment
››› import dns ››› dns .__ file__ '/usr/local/lib/python2.6/site-packages/dns/__init__.pyc' ››› Абсолютный путь - person ololo; 23.05.2010
comment
Бинго: в подкаталоге dns site-packages явно есть все, что вам нужно, а в подкаталоге dns dev/dns нет (отсутствует модуль resolver или файл .pth для перехода к нему, или что-то в этом роде). - person Alex Martelli; 24.05.2010
comment
На самом деле наличие в рабочем каталоге dns.py, который импортируется вместо пакета, является достаточным объяснением. Если вы не хотите, чтобы импорт разрешался из текущего каталога (как обычно ведет себя Python), вы, конечно, можете изменить sys.path перед импортом. - person Alex Martelli; 24.05.2010
comment
@Choor, пожалуйста: также подумайте о том, чтобы принять ответ (спасибо приятно, но принятие - это ключ: это ТАКОЙ этикет! -). Для этого достаточно щелкнуть значок в виде галочки под числами в верхнем левом углу ответа. - person Alex Martelli; 24.05.2010