Python调用webbrowser报GLIBCXX_3.4.29缺失错误的排查求助
问题场景
运行以下Python脚本时:
import webbrowser webbrowser.open(url)
无论是VSCode还是终端环境,都会抛出相同的运行时警告:
/snap/core20/current/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /lib/x86_64-linux-gnu/libproxy.so.1) Failed to load module: /home/andrea/snap/code/common/.cache/gio-modules/libgiolibproxy.so
已通过命令strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX确认系统层面存在GLIBCXX_3.4.29版本,且已升级至最新库,但问题仍未解决。
解决方案建议
1. 临时指定正确的库路径运行脚本
问题根源是snap环境优先加载了旧版本的libstdc++,可在运行脚本时手动指定系统新库路径:
LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu python your_script.py
若使用PyEnv管理Python,需指向PyEnv的Python可执行文件:
LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu ~/.pyenv/shims/python your_script.py
2. 永久设置LD_LIBRARY_PATH(当前用户)
编辑shell配置文件(~/.bashrc或~/.zshrc,依使用的shell而定),添加:
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
保存后执行source ~/.bashrc(或对应配置文件)使设置生效,后续运行Python脚本会优先加载系统新库。
3. 重新编译PyEnv下的Python
若怀疑PyEnv编译的Python未链接新libstdc++,可重新编译:
- 先卸载当前Python版本(示例为3.10.0):
pyenv uninstall 3.10.0
- 安装编译依赖(以Ubuntu为例):
sudo apt-get update && sudo apt-get install build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
- 重新安装编译Python:
pyenv install 3.10.0
编译过程会自动链接系统当前的最新库文件。
4. 绕过webbrowser库直接调用浏览器
若以上方法无效,可直接调用系统浏览器命令打开链接,规避webbrowser库的依赖问题:
import subprocess # 调用Chrome subprocess.run(["google-chrome", url]) # 调用Firefox # subprocess.run(["firefox", url]) # 调用系统默认浏览器(Linux通用) # subprocess.run(["xdg-open", url])
内容的提问来源于stack exchange,提问作者Andrea Moro

