2013-03-02 32 views
1

导入模块时,我对优先级感到困惑,我该如何改变它。导入优先级一致性?

当前目录中确实含有:

l10n/__init__.py 
l10n/moneyfmt.py 

另一个目录(不同的,那么电流)与一个额外的包中包含:

/opt/l10n/__init__.py 
/opt/l10n/utils.py 

现在运行Python解释:

>>> import sys 
>>> sys.path 
['', '/usr/lib/python27.zip', '/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', 
'/usr/lib/python2.7/site-packages', '/usr/lib/python2.7/site-packages/PIL', 
'/usr/lib/python2.7/site-packages/gtk-2.0', 
'/usr/lib/python2.7/site-packages/setuptools-0.6c11.egg-info'] 
>>> import l10n.utils 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named utils # CORRECT, NOT IN PATH YET 
>>> sys.path.insert(0, '/opt') 
>>> sys.path 
['/opt', '', '/usr/lib/python27.zip', '/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', 
'/usr/lib/python2.7/site-packages', 
'/usr/lib/python2.7/site-packages/PIL', 
'/usr/lib/python2.7/site-packages/gtk-2.0', 
'/usr/lib/python2.7/site-packages/setuptools-0.6c11.egg-info'] 
>>> import l10n.utils 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named utils # WHY IT CAN NOT FIND THE MODULE? 

为什么在我完成了全部拍摄之后,找不到包含l10n.utils模块的软件包h到sys.path中的搜索路径?当前目录总是在此优先吗?它可以改变吗?

回答

2

您有两个名为l10n的模块。您第一次尝试import l10n.utils时,错误的l10n在路径上。我怀疑这个错误的l10n正在被Python shell缓存,当您第二次尝试import l10n.utils时(不管您对sys.path所做的更改如何),都会被查阅。

尝试重新启动Python shell,首先将sys.path更改为import l10n.utils,然后立即执行import l10n.utils

+0

哇,如果我省略了第一次导入尝试,它会正确加载'l10n.utils'模块!是否有一些关于进口缓存的文档?它能稍后被清除吗? – 2013-03-02 19:33:22

+0

@DavidUnric:有,请参阅http://docs.python.org/2/reference/simple_stmts.html#the-import-statement和http://docs.python.org/2/library/sys.html# sys.modules – NPE 2013-03-02 19:34:43

+0

感谢您的及时答复。仍然觉得它有点令人惊讶的行为。 – 2013-03-02 19:37:47