2010-05-23 266 views
2

很奇怪我: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 
[[email protected] 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 =禁用

回答

4

什么是dns.__file__在第一种情况下?我怀疑这是从目录来你cd编入第二次(当你开始Python的推移在sys.path前面的当前目录),而是从包含有所欠缺,其第二个出现的关键resolver模块封装。

+0

>>>进口DNS >>> DNS .__ FILE__ '/usr/local/lib/python2.6/site-packages/dns/__init__.pyc' >>> 绝对路径 – ololo 2010-05-23 19:16:50

+0

宾果:在“site-packages”的'dns'子目录显然是你所需要的,而'dev/dns'的'dns'子目录不是(它缺少'resolver'模块或者'.pth'文件来指向它或类似的东西)。 – 2010-05-23 20:26:06

+1

实际上,在工作目录中存在一个'dns.py'而不是包被导入,这足以说明问题。如果您不想从当前目录中解析导入(正如Python通常所做的那样),当然可以在导入之前修改'sys.path'。 – 2010-05-23 20:27:40