Python - 为什么导入子模块会使包可见?
Python - why importing a submodule makes the package visible?
下面的代码打印 wx.ACCEL_NORMAL 好吧
import wx.gizmos
# import wx # uncommenting this the warning is eliminated
print wx.ACCEL_NORMAL # Pycharm warns: "Cannot find reference 'ACCEL_NORMAL'
# in imported module wx" but finds it alright when i run it
两个问题:
- 它怎么会看到wx?
- 为什么会发出警告?它与 wx (2.8.12.1) 特性有关,还是可以预料的,或者它是 Pycharm 错误还是...?
编辑:
可能是以下 wx 问题没有发出警告:
import os.path
print os.name
但 Q1 仍然有效
编辑 2:
将导入更改为
import wx.gizmos as gizmos
我得到了预期的结果:
Traceback (most recent call last):
File "/home/utumno/.PyCharm40/config/scratches/scratch", line 5, in <module>
print wx.ACCEL_NORMAL # Pycharm warns: "Cannot find reference 'ACCEL_NORMAL'
NameError: name 'wx' is not defined
行import wx.gizmos
首先导入wx
包(如果之前没有载入则存放在sys.modules['wx']
中,然后还导入wx.gizmos
模块并使其成为一个属性sys.modules['wx']
对象。Python 然后将 wx
绑定到 sys.modules['wx']
.
因此,您最终在代码中得到了全局名称 wx
,您可以通过它引用 wx.gizmos
。
PyCharm的警告这里可以忽略; IDE 使用的静态分析应该考虑到导入 wx.gizmos
使得 wx
可用。这对 wx.gizmos
失败而对 os.path
有效可能是由于多种因素造成的;也许 PyCharm 开发人员将 os
处理硬编码到分析器中(因为导入 os.path
是如此常见),或者 wx
命名空间被实现为 C 扩展,这意味着静态分析必须依赖预先计算的可用名称地图,也许 wx
地图未在此处加载。
下面的代码打印 wx.ACCEL_NORMAL 好吧
import wx.gizmos
# import wx # uncommenting this the warning is eliminated
print wx.ACCEL_NORMAL # Pycharm warns: "Cannot find reference 'ACCEL_NORMAL'
# in imported module wx" but finds it alright when i run it
两个问题:
- 它怎么会看到wx?
- 为什么会发出警告?它与 wx (2.8.12.1) 特性有关,还是可以预料的,或者它是 Pycharm 错误还是...?
编辑:
可能是以下 wx 问题没有发出警告:
import os.path
print os.name
但 Q1 仍然有效
编辑 2:
将导入更改为
import wx.gizmos as gizmos
我得到了预期的结果:
Traceback (most recent call last):
File "/home/utumno/.PyCharm40/config/scratches/scratch", line 5, in <module>
print wx.ACCEL_NORMAL # Pycharm warns: "Cannot find reference 'ACCEL_NORMAL'
NameError: name 'wx' is not defined
行import wx.gizmos
首先导入wx
包(如果之前没有载入则存放在sys.modules['wx']
中,然后还导入wx.gizmos
模块并使其成为一个属性sys.modules['wx']
对象。Python 然后将 wx
绑定到 sys.modules['wx']
.
因此,您最终在代码中得到了全局名称 wx
,您可以通过它引用 wx.gizmos
。
PyCharm的警告这里可以忽略; IDE 使用的静态分析应该考虑到导入 wx.gizmos
使得 wx
可用。这对 wx.gizmos
失败而对 os.path
有效可能是由于多种因素造成的;也许 PyCharm 开发人员将 os
处理硬编码到分析器中(因为导入 os.path
是如此常见),或者 wx
命名空间被实现为 C 扩展,这意味着静态分析必须依赖预先计算的可用名称地图,也许 wx
地图未在此处加载。