Numpy神秘失踪事件

简介: Numpy神秘失踪事件

前几天倒腾Python使用impala包连接hive,中间踩了N个坑。其中最有趣的,也最值得记录一下的当属numpy的这个。这里老胡分享一下解决问题的过程,希望大家看后有所收获。


由于是内网测试环境,没有外网,自然就先在本地用conda创建python虚拟环境,安装好所有需要的包再移过去。


一顿操作猛如虎,种坑都填好了,然后发现impala.util中的as_pandas起不动,原因是其依赖的pandas起不动,归根结底是pandas依赖的numpy import报错


ImportError: Something is wrong with the numpy installation. 
While importing we detected an older version of numpy in 
['/.../anconda3/lib/site-packages/numpy']. 
One method of fixing this is to repeatedly uninstall numpy 
until none is found, then reinstall this version.


定位问题是卡在numpy源码中的__init__.py这一段:


if not (hasattr(multiarray, '_multiarray_umath') and
        hasattr(umath, '_multiarray_umath')):
    import sys
    path = sys.modules['numpy'].__path__
    msg = ("Something is wrong with the numpy installation. "
        "While importing we detected an older version of "
        "numpy in {}. One method of fixing this is to repeatedly uninstall "
        "numpy until none is found, then reinstall this version.")
    raise ImportError(msg.format(path))


奇怪的是导入version是正常的,显示目前的numpy版本是1.19.4


from numpy.version import version as __version__
print(__version__)


报错信息中的建议是先完整卸载numpy,然后重装。网上看遍了解决办法,也都是如此。


秉承着匠人程序员精神,一定要追根溯源,另辟蹊径解决问题!


对不起,调子起高了,其实是内网环境太不方便了。


既然报错信息说了有older version的numpy,想办法把它清理干净不就行了吗?


先来看看到底之前装了什么老版本的numpy


640.png


这就奇怪了,.../lib/site-packages目录下1.14.3版的手动删除过了,怎么还有呢?看样子还有残存,翻一下...\Anaconda3\conda-meta

640.png

果然发现1.14.3的信息,delete这几项再运行一下conda list numpy,显示只有最新版的version了,666~

640.png

再次import numpy,依然是最初的报错。。。难道还有older version余孽?

解决问题还是要回归本源,咱们看一下import的原理:


对于python来说,所有被加载到内存的模块都是放在sys.modules里面,所以执行import时会首先去该列表中查询是否已添加。如果已经在sys.modules中,那就简单了,只需要将该module的name添加到我们正在调用该module的本地空间中。如果还没有放在sys.modules中,就需要在sys.path所有路径的目录中去按顺序查找该模块的文件,这些文件一般后缀为".py"、".pyo"、".pyc"、".pyd"、".dll",找到这些模块后就可以将这些模块添加到sys.modules中,再将module name导入到本地。


所以很有可能是在导入numpy时新老版本在sys.modules中撞车了?


先查看一下modules里都有什么:


import sys
sys.modules


640.png

元凶终于找到了


赶紧跑去..\Anaconda3\Lib\site-packages\numpy\core__pycache 目录下把这些pyd文件删除!!!

640.png

640.png


相关文章
|
存储 缓存 开发工具
AppsFlyer 研究(二)应用内事件
AppsFlyer 研究(二)应用内事件
509 0
|
7月前
|
Python
Pandas和pyecharts绘制某天多省区连续确诊病例无新增天数的玫瑰图实战(附源码)
Pandas和pyecharts绘制某天多省区连续确诊病例无新增天数的玫瑰图实战(附源码)
123 0
|
4月前
|
数据采集 机器学习/深度学习 数据挖掘
揭秘DataFrame缺失值处理的神秘面纱:从填充到删除,再到插值,你的数据能否起死回生?
【8月更文挑战第22天】在数据分析中,处理DataFrame内的缺失值至关重要。本文通过一个关于公司员工基本信息的例子,展示了三种常见方法:填充、删除和插值。首先构建了一个含有缺失值的DataFrame,然后使用均值填充年龄缺失值;接着演示了删除含缺失值的行;最后采用线性插值填补。此外,对于复杂情形,还可利用机器学习预测填充。合理处理缺失值能有效提升数据质量,为后续分析奠定坚实基础。
75 2
|
6月前
|
前端开发 程序员
老程序员分享:jquerytooltip事件
老程序员分享:jquerytooltip事件
26 0
|
7月前
|
数据可视化 Python
利用Pandas探究自行车租赁随时间及天气变化的分布情况并可视化(附源码 超详细)
利用Pandas探究自行车租赁随时间及天气变化的分布情况并可视化(附源码 超详细)
144 1
|
数据采集 Python
用 Python 自动获取NBA现役球员的职业生涯数据曲线
用 Python 自动获取NBA现役球员的职业生涯数据曲线
|
Python
python股票量化交易(2)---震荡类指标KDJ
汝之命,未知若何?即命当荣显,常做落寞想;即时当顺利,常做拂逆想;即眼前足食,常作贫窭想;即人相爱敬,常作恐惧想;即家世望重,常作卑下想;即学问颇优,常作浅陋想。
465 1
python股票量化交易(2)---震荡类指标KDJ
|
机器学习/深度学习 数据采集 算法
02 放大招,Python预测8月22号双色球号码!
02 放大招,Python预测8月22号双色球号码!
|
数据可视化 数据挖掘 Python
使用pandas分析1976年至2010年的美国大选的投票数据
使用pandas分析1976年至2010年的美国大选的投票数据
217 0
使用pandas分析1976年至2010年的美国大选的投票数据
|
Unix 数据库 C++
numpy重新学习系列(1)---重新认识numpy
numpy重新学习系列(1)---重新认识numpy
85 0