安装python-openstackclient后执行openstack命令提示找不到openstackclient.shell模块
解决
openstack命令报错ModuleNotFoundError: No module named 'openstackclient.shell' 问题分析
报错核心原因是系统调用的openstack脚本(路径/usr/bin/openstack)与你通过pip安装python-openstackclient包的Python环境不匹配。SUSE系统可能自带旧版OpenStack客户端脚本,或脚本默认绑定的Python版本(如Python2)和你安装包的Python3环境不一致,导致找不到对应模块。
排查与解决步骤
1. 确认环境匹配性
先排查脚本和pip对应的Python版本是否一致:
- 查看
/usr/bin/openstack使用的Python版本:
输出类似head -n1 /usr/bin/openstack#!/usr/bin/python(可能为Python2)或#!/usr/bin/python3。 - 查看安装包所用pip对应的Python路径:
输出例如which pip3/usr/local/bin/pip3,对应的Python路径通常是同目录下的python3。
若两者路径不一致,说明脚本和安装的包不在同一个环境。
2. 直接调用正确环境的客户端
找到pip安装的openstack脚本路径,直接执行:
- 先获取包的安装位置:
输出类似pip3 show python-openstackclient | grep LocationLocation: /usr/local/lib/python3.6/site-packages,对应的脚本在同级的bin目录(如/usr/local/bin/openstack)。 - 直接执行该路径的命令:
/usr/local/bin/openstack --version
3. 修改系统脚本的Shebang
若想继续用openstack命令直接调用,可修改/usr/bin/openstack的第一行,指定正确的Python环境:
sudo sed -i '1s/.*/#!/usr/bin/python3/' /usr/bin/openstack
(将/usr/bin/python3替换为你实际安装包的Python路径)
4. 使用虚拟环境隔离(推荐)
避免系统环境冲突,创建虚拟环境安装并使用:
# 创建虚拟环境 python3 -m venv openstack-venv # 激活环境 source openstack-venv/bin/activate # 安装客户端 pip install python-openstackclient # 执行命令 openstack --version
内容的提问来源于stack exchange,提问作者HC LW
相关产品推荐
相关产品推荐

