You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04中Certbot启动报错:无法从urllib3.contrib导入appengine

问题描述

运行Certbot时出现导入错误,核心是requests_toolbelt无法从urllib3.contrib导入appengine模块,完整报错如下:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/requests_toolbelt/_compat.py", line 48, in <module>
    from requests.packages.urllib3.contrib import appengine as gaecontrib
ImportError: cannot import name 'appengine' from 'requests.packages.urllib3.contrib' (/usr/local/lib/python3.10/dist-packages/urllib3/contrib/__init__.py)

During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/usr/bin/certbot", line 33, in <module>
    sys.exit(load_entry_point('certbot==1.21.0', 'console_scripts', 'certbot')())
  File "/usr/bin/certbot", line 25, in importlib_load_entry_point
    return next(matches).load()
  File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 171, in load
    module = import_module(match.group('module'))
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/usr/lib/python3/dist-packages/certbot/main.py", line 2, in <module>
    from certbot._internal import main as internal_main
  File "/usr/lib/python3/dist-packages/certbot/_internal/main.py", line 28, in <module>
    from certbot._internal import account
  File "/usr/lib/python3/dist-packages/certbot/_internal/account.py", line 19, in <module>
    from acme.client import ClientBase  # pylint: disable=unused-import
  File "/usr/lib/python3/dist-packages/acme/client.py", line 34, in <module>
    from requests_toolbelt.adapters.source import SourceAddressAdapter
  File "/usr/lib/python3/dist-packages/requests_toolbelt/__init__.py", line 12, in <module>
    from .adapters import SSLAdapter, SourceAddressAdapter
  File "/usr/lib/python3/dist-packages/requests_toolbelt/adapters/__init__.py", line 12, in <module>
    from .ssl import SSLAdapter
  File "/usr/lib/python3/dist-packages/requests_toolbelt/adapters/ssl.py", line 16, in <module>
    from .._compat import poolmanager
  File "/usr/lib/python3/dist-packages/requests_toolbelt/_compat.py", line 50, in <module>
    from urllib3.contrib import appengine as gaecontrib
ImportError: cannot import name 'appengine' from 'urllib3.contrib' (/usr/local/lib/python3.10/dist-packages/urllib3/contrib/__init__.py)
原因分析

urllib3 2.x版本移除了urllib3.contrib.appengine模块,而系统中安装的requests-toolbelt版本较旧,仍依赖这个已被移除的模块。同时系统存在两个urllib3版本:系统自带版本(/usr/lib/python3/dist-packages)和手动安装的高版本(/usr/local/lib/python3.10/dist-packages),导致Certbot调用时加载了高版本urllib3,引发冲突。

解决方案

方案1:降级urllib3到兼容版本

执行命令降级urllib3到保留appengine模块的1.x版本:

sudo pip3 install urllib3==1.26.15

验证版本:

pip3 show urllib3

确认版本为1.x系列后,重新运行Certbot测试。

方案2:更新requests-toolbelt到兼容版本

若不想降级urllib3,可更新requests-toolbelt到修复了该导入问题的版本:

sudo pip3 install --upgrade requests-toolbelt

新版本已移除对urllib3.contrib.appengine的依赖,适配urllib3 2.x。

方案3:使用Certbot的snap包(推荐)

Ubuntu系统推荐通过snap安装Certbot,避免系统Python包冲突:

  1. 卸载系统中的Certbot:
sudo apt remove certbot
sudo apt autoremove
  1. 安装snap版Certbot:
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

该方式使用独立环境运行Certbot,完全隔离系统Python包,从根源避免依赖冲突。


内容的提问来源于stack exchange,提问作者Rene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:22:42