清除sys.path-Import priority后,python如何进行导入

清除sys.path-Import priority后,python如何进行导入,python,python-2.7,ipython,python-import,Python,Python 2.7,Ipython,Python Import,我有一个名为Queue的python模块,它与python中的默认队列冲突 在试图强制导入默认队列时,我试图简单地清除sys.path 我知道导入是从sys.path查找的。 但在我清除syspath之后,Python似乎仍然能够导入模块 请解释一下 In [26]: sys.path Out[26]: [] In [27]: import datetime In [28]: datetime Out[28]: <module 'datetime' from '/usr/local/pyt

我有一个名为Queue的python模块,它与python中的默认队列冲突

在试图强制导入默认队列时,我试图简单地清除sys.path

我知道导入是从sys.path查找的。 但在我清除syspath之后,Python似乎仍然能够导入模块

请解释一下

In [26]: sys.path
Out[26]: []
In [27]: import datetime
In [28]: datetime
Out[28]: <module 'datetime' from '/usr/local/python2.7/lib/python2.7/lib-dynload/datetime.so'>
In [31]: import xyz.Queue
In [32]: xyz.Queue
Out[32]: <module 'xyz.Queue' from '/public/abc/def/ghi/xyz/Queue/__init__.pyc'>
In [33]: sys.path
Out[33]: []
[26]中的
:sys.path
Out[26]:[]
In[27]:导入日期时间
In[28]:日期时间
出[28]:
在[31]中:导入xyz.队列
在[32]:xyz.队列中
出[32]:
In[33]:sys.path
Out[33]:[]
以及如何导入本机模块队列而不是队列


我知道重构队列是这个问题应该得到的解决方案,但它不是现在需要的解决方案。

从未来导入绝对导入作为文件的第一行


这将迫使所有进口都是绝对的,而不是相对的。因此,
import Queue
将导入标准模块,以导入您将从中使用的本地模块。import foobar

我无法在默认的python shell中复制它,但我可以在IPython中复制它。对于IPython中sys.path的异常行为,有几个问题需要说明。希望添加标签能给别人提供线索。你使用的是什么操作系统?我使用的是CentOS,我在Django Shell中输入了这个。显式相对导入只有在包中时才有效。如果用户的
队列
包与正在运行的脚本位于同一文件夹中,则不会有帮助。但是,将
Queue.py
文件移动到包中可能是一个很好的解决方案。尝试过了。没用。我正在django应用程序中运行此脚本-因此请告诉我这是否是一个问题。值得一提的是,脚本是从文件夹xyz运行的,队列在xyz中。所以我想绝对导入是没有意义的,对吧?这并没有回答为什么在sys.path为空的情况下仍然可以加载模块的问题。答案可能是因为内部使用了另一个符号来保存路径,而sys.path只是它的一个浅拷贝。但是,我们必须检查Python的内部结构。