Python模块结构与import机制疑问:sklearn导入报错求助
Python模块结构与import语句工作原理解析
模块层级结构
Python的代码组织遵循包-子包-模块的层级:
- 一个「包」是包含
__init__.py文件的文件夹(Python 3.3+支持无该文件的命名空间包,但sklearn属于传统包)。 - 包内的子包、模块不会自动加载到父包的命名空间中,除非父包的
__init__.py里显式声明导入这些子模块。
两种import方式的区别
1. import 包名 as 别名
这种方式仅将包本身导入当前命名空间,包内的子模块不会自动加载。如果要访问子模块,必须额外显式导入,否则直接访问会触发属性不存在的错误。
2. from 包名 import 子模块
直接将指定的子模块导入当前命名空间,子模块的内容可以直接使用,无需额外操作。
你的代码问题分析
- 执行
import sklearn as sk时,sklearn包被导入,但它的__init__.py并未将linear_model子模块导入到sklearn的命名空间中,因此sk.linear_model会报错AttributeError: module 'sklearn' has no attribute 'linear_model'。 from sklearn import linear_model则是直接加载linear_model子模块到当前命名空间,所以能正常运行。
补充:如何通过import sklearn as sk使用linear_model
如果偏好这种导入方式,可以补充导入子模块:
import sklearn as sk import sklearn.linear_model # 显式导入子模块 # 之后即可正常使用 model = sk.linear_model.LinearRegression()
内容的提问来源于stack exchange,提问作者zhalok rahman
相关产品推荐
相关产品推荐

