在GCP Cloud Shell安装DBT CLI后执行命令报错,求排查解决
DBT CLI在GCP Cloud Shell运行报错的排查与解决
问题描述
在GCP Cloud Shell中通过pip install dbt安装DBT CLI后,在.profile文件中添加了路径配置:
if [ -d "$HOME/.local/bin" ] ; then PATH="$HOME/.local/bin:$HOME/.local/lib/python3.9/site-packages:$PATH" fi export $PATH
执行dbt --version或dbt --init时触发如下错误:
my_name@cloudshell:~$ dbt --init Traceback (most recent call last): File "/home/my_name/.local/bin/dbt", line 5, in <module> from dbt.main import main File "/home/my_name/.local/lib/python3.9/site-packages/dbt/main.py", line 11, in <module> import dbt.version File "/home/my_name/.local/lib/python3.9/site-packages/dbt/version.py", line 11, in <module> import dbt.semver File "/home/my_name/.local/lib/python3.9/site-packages/dbt/semver.py", line 8, in <module> import dbt.utils File "/home/my_name/.local/lib/python3.9/site-packages/dbt/utils.py", line 9, in <module> import jinja2 File "/home/my_name/.local/lib/python3.9/site-packages/jinja2/__init__.py", line 12, in <module> from .environment import Environment File "/home/my_name/.local/lib/python3.9/site-packages/jinja2/environment.py", line 25, in <module> from .defaults import BLOCK_END_STRING File "/home/my_name/.local/lib/python3.9/site-packages/jinja2/defaults.py", line 3, in <module> from .filters import FILTERS as DEFAULT_FILTERS # noqa: F401 File "/home/my_name/.local/lib/python3.9/site-packages/jinja2/filters.py", line 13, in <module> from markupsafe import soft_unicode ImportError: cannot import name 'soft_unicode' from 'markupsafe' (/usr/local/lib/python3.9/dist-packages/markupsafe/__init__.py)
错误原因
- markupsafe版本不兼容:
soft_unicode在markupsafe 2.1.0及以上版本中已被移除,但当前安装的dbt依赖的jinja2版本仍在调用该方法,导致导入失败。 - PATH配置错误:
.profile中添加$HOME/.local/lib/python3.9/site-packages到PATH是无效操作(PATH仅用于可执行文件路径,Python模块目录无需加入),且export $PATH写法错误,正确应为export PATH。
解决步骤
1. 修正.profile配置
编辑.profile文件,修改为以下内容:
if [ -d "$HOME/.local/bin" ] ; then PATH="$HOME/.local/bin:$PATH" fi export PATH
执行以下命令让配置立即生效:
source ~/.profile
2. 降级markupsafe到兼容版本
执行pip命令安装兼容的markupsafe版本:
pip install markupsafe==2.0.1
3. 验证修复结果
执行以下命令确认dbt可正常运行:
dbt --version
若能正常输出版本信息,再尝试dbt --init验证功能完整性。
内容的提问来源于stack exchange,提问作者dips
相关产品推荐
相关产品推荐

