通过SSH运行Pytest测试提示‘no module named pandas’的排查求助
解决SSH会话中pytest找不到pandas的问题
这种情况大概率是SSH会话的环境和你本地登录服务器时的环境不一致导致的——虽然你本地和虚拟环境都装了pandas,但SSH连接时用的Python环境根本不是你装了依赖的那个。下面一步步排查解决:
先确认SSH会话用的是哪个Python环境
分别在本地登录服务器和SSH连接后执行这两个命令,对比输出:which python3 # 或者which python,看你日常用的版本 pip3 list | grep pandas如果SSH里的Python路径和本地不一样,或者pip list里找不到pandas,那就是环境选错了。
直接指定虚拟环境的Python来运行pytest
这是最稳妥的办法,不用纠结环境变量。假设你的虚拟环境路径是~/my_venv,那SSH连接后直接跑:~/my_venv/bin/python -m pytest -s -v jupyter_test.py用虚拟环境里的Python调用pytest,就能确保用的是该环境下的所有依赖,包括pandas。
修复SSH会话的环境变量加载问题
有时候本地登录会加载~/.bashrc或~/.zshrc(比如你在里面配置了虚拟环境自动激活或者PATH路径),但SSH的非交互式会话默认不会加载这些文件。你可以:- 把环境配置移到
~/.bash_profile(bash用户)或~/.zprofile(zsh用户)里,SSH登录时会自动加载这些文件; - 或者在SSH命令里手动激活环境再运行测试:
ssh user@server.com "source ~/my_venv/bin/activate && py.test -s -v jupyter_test.py"
- 把环境配置移到
检查pytest的归属
执行which py.test对比本地和SSH的输出,如果SSH里的pytest是系统级的(比如/usr/bin/py.test),那它会调用系统Python,自然找不到虚拟环境里的pandas。用前面说的python -m pytest就能避开这个问题,因为它会用当前Python环境对应的pytest版本。
内容的提问来源于stack exchange,提问作者president
相关产品推荐
相关产品推荐

