pandas导入失败:命令行可正常导入但脚本执行报错问题求助
问题成因
- 解释器环境不匹配:脚本首行shebang指定的
#!/bin/python3与你手动测试使用的python3.6(Anaconda发行版)是两个独立的Python运行环境,第三方包互不共用。你手动验证的Anaconda环境已安装pandas,但/bin/python3对应的系统级Python环境未安装pandas。 - 网络策略变更:原脚本可以正常运行是因为此前服务器公网访问pypi源正常,脚本调用的
pip.main方法可以自动为/bin/python3环境安装pandas;近期服务器网络限制导致无法连接pypi源,安装逻辑超时失败,才会出现启动报错。 - 不规范的依赖安装逻辑:
pip.main属于pip未公开的内部API,本身没有向后兼容保证,即使网络正常也存在版本兼容风险。 - 删除pip安装逻辑后报错是因为
/bin/python3环境本身没有安装pandas,直接导入自然触发ModuleNotFoundError。
解决方案
方案1(推荐,改动最小)
修改脚本首行的shebang配置,直接使用你已经验证过带pandas的Anaconda Python 3.6解释器:
把首行#!/bin/python3替换为#!/usr/bin/env python3.6,同时删除原脚本中如下两行代码即可:
import pip pip.main(['install','pandas'])
方案2(保留系统Python解释器的场景)
手动给/bin/python3对应环境安装pandas,命令行执行:
/bin/python3 -m pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完成后删除脚本中的pip安装逻辑即可正常运行。
方案3(需要保留自动装依赖逻辑的场景)
将原脚本中不稳定的pip.main写法替换为规范的跨版本依赖安装逻辑,替换原有的两行pip代码为:
import subprocess import sys # 指定国内源避免公网超时,同时保证给当前运行脚本的解释器装包 subprocess.check_call([sys.executable, "-m", "pip", "install", "-i", "https://pypi.tuna.tsinghua.edu.cn/simple", "pandas"])
内容的提问来源于stack exchange,提问作者gafm
相关产品推荐
相关产品推荐

