求助:导入scipy.stats.norm后无法获取scipy版本的问题
解决Scipy版本查询的报错问题
嘿,我明白你遇到的问题啦!咱们一步步来拆解和解决:
为什么会报错?
- 第一个错误
NameError: name 'scipy' is not defined:你只导入了scipy.stats下的norm子模块,但Python的模块是分层结构的,顶层的scipy模块并没有被导入,所以直接用scipy.__version__时,Python找不到这个名字。 - 第二个错误
AttributeError: 'norm_gen' object has no attribute '__version__':norm是scipy.stats提供的正态分布生成器对象,它本身并不携带Scipy的版本信息——版本信息是存在顶层scipy模块里的。
两种解决方法
方法1:直接导入顶层scipy模块
这是最直接的方式,先导入整个scipy,再查询版本:
import scipy from scipy.stats import norm # 现在就能正常打印版本啦 print(scipy.__version__)
方法2:不导入scipy,直接查询包版本(Python 3.8+)
如果不想导入整个scipy模块,可以用Python标准库的importlib.metadata来查询已安装包的版本:
from scipy.stats import norm import importlib.metadata print(importlib.metadata.version("scipy"))
兼容老版本Python的方法(低于3.8)
如果你的Python版本在3.8以下,可以用pkg_resources(需要确保安装了setuptools):
from scipy.stats import norm import pkg_resources print(pkg_resources.get_distribution("scipy").version)
内容的提问来源于stack exchange,提问作者Mohd Bilal




