CentOS 7 Hadoop集群Python已安装模块无法调用问题求助
我之前维护CentOS 7的Hadoop集群时,也碰到过一模一样的问题——Ansible批量部署后明明显示pandas已安装,但用python3.6调用就是报No module named pandas错误。核心原因几乎都是pip与Python版本不匹配,导致模块装到了错误的Python环境里。下面是一步步的排查和解决方法:
1. 先确认pip与Python3.6的对应关系
登录出问题的服务器,执行以下命令,查看当前python3.6对应的pip路径:
python3.6 -m pip --version
正常输出应该类似这样:
pip 21.3.1 from /usr/local/lib/python3.6/site-packages/pip (python 3.6)
如果输出里的Python版本不是3.6(比如显示python 2.7或者python 3.4),那就是问题根源:你用的pip对应其他Python版本,安装的pandas根本不在python3.6的模块目录里。
2. 修复pip与Python3.6的关联
如果系统里没有python3.6专属的pip,先执行以下命令安装:
python3.6 -m ensurepip --upgrade
这个命令会自动给python3.6安装匹配版本的pip,并且升级到最新兼容版本。
之后用这个专属pip重新安装pandas:
python3.6 -m pip install pandas
这样安装的模块会直接放到python3.6的site-packages目录下,不会和其他Python版本混淆。
3. 修正Ansible部署脚本(避免后续批量出问题)
之前的Ansible任务大概率是直接用了pip install命令,这会调用系统默认的pip,导致版本不匹配。你需要修改playbook,指定对应python3.6的pip:
方式一:用Ansible的pip模块指定executable
- name: 为Python3.6安装pandas pip: name: pandas executable: pip3.6 # 直接指定python3.6对应的pip
方式二:用command模块强制调用python3.6的pip
- name: 为Python3.6安装pandas command: python3.6 -m pip install pandas --upgrade
第二种方式更稳妥,完全避免了系统默认pip的干扰。
4. 验证修复结果
最后执行以下命令验证:
python3.6 -c "import pandas; print('Pandas版本:', pandas.__version__)"
如果能正常输出pandas的版本号,就说明问题已经解决了。
内容的提问来源于stack exchange,提问作者AValenti

