Python PyDev错误地警告未使用的导入语句

Python PyDev错误地警告未使用的导入语句,python,eclipse,pydev,Python,Eclipse,Pydev,我在一个模块中获得了以下Python代码: import ldap import ldap.sasl x = ldap.VERSION3 y = ldap.sasl.gssapi Eclipse(使用PyDev)警告我第一条导入语句未使用。但它显然正在被使用。Python显然隐式地导入父包——我觉得这很奇怪,因为Python更喜欢显式,而我在文档中找不到任何关于这一点的提及。但这并不意味着我不用第一个。更奇怪的是,如果我删除最后一行,PyDev声称导入语句的和都未使用。(我认为最后一个案例显然

我在一个模块中获得了以下Python代码:

import ldap
import ldap.sasl
x = ldap.VERSION3
y = ldap.sasl.gssapi
Eclipse(使用PyDev)警告我第一条导入语句未使用。但它显然正在被使用。Python显然隐式地导入父包——我觉得这很奇怪,因为Python更喜欢显式,而我在文档中找不到任何关于这一点的提及。但这并不意味着我不用第一个。更奇怪的是,如果我删除最后一行,PyDev声称导入语句的都未使用。(我认为最后一个案例显然是PyDev中的一个bug。)


所以我的问题是,有没有一种方法可以关闭第一行的警告,而不关闭所有未使用导入的警告?我不想用
@UnusedImport
注释污染我的代码。

正确的答案是按照PyDev说的去做

由于
import ldap.sasl
始终导入
ldap
,因此不需要使用
import ldap
语句,因此应将其删除


至于PyDev,它声称如果删除最后一行,这两行都是未使用的……好吧,这肯定不是世界上最好的消息传递方式,但这并不是真的错。导入ldap
import ldap
是不必要的,因为您有
import ldap.sasl
。但是导入ldap.sasl是不必要的,因为您从未使用过它。是的,如果您删除了
import ldap.sasl
,那么
import ldap
就不再是不必要的了,但是警告并不是关于对于不同版本的代码,什么才是正确的,对吗


您是对的,没有解释这一点,2.x参考文档也没有直接说明这一点

但是,关于的3.x参考文档专门描述了这种行为,并给出了示例(例如,请参阅“常规软件包”一节),而2.x参考文档确实直接引用了,其中指出:

每当加载包的子模块时,Python都会确保首先加载包本身,并在必要时加载其
\uuuu init\uuuu.py
文件。包裹也一样。因此,当执行语句import Sound.Effects.echo时,它首先确保加载声音;然后确保加载声音效果;只有这样,它才能确保加载Sound.Effects.echo(如果以前没有加载,则加载它)

此外,所有现有的Python2.x实现都是按照3.x文档和原始包规范所描述的方式进行的,而且将来人们不太可能创建全新的2.x实现,因此我认为这是一个保证


如果您想知道最初的基本原理,您必须阅读Python 1.3中的
ni
模块。(我没有链接。)如果你想知道为什么在2.7中仍然是这样,那是因为Python中的第一次彻底清理直到3.0才发生。如果您想知道为什么在3.0中,甚至在3.3中(在改进并进一步清理了
import
之后)仍然如此,您必须阅读有关
importlib
的讨论,等等。当大家一致同意不改变某件事时(或者讨论太少,以至于没有人认为有必要要求达成共识),你就不会得到政治公众人物或邮件列表之外的任何其他“书面记录”。如果我没记错的话,它确实是在讨论成为PEP 328的相对与绝对重要思想时顺便提出来的,但没有人认为这是一个需要解决的问题