Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
为什么使用 apt 安装的 Python 第三方包版本会滞后?如何解决这一问题?_创想鸟

为什么使用 apt 安装的 Python 第三方包版本会滞后?如何解决这一问题?

为什么使用 apt 安装的 python 第三方包版本会滞后?如何解决这一问题?

为什么使用 apt 安装的 Python 第三方包版本会出现滞后现象?

在 Ubuntu 22.04 系统中,用户可能会发现通过 apt 安装的 Python 第三方包版本相对较旧。这种情况在处理 Let’s Encrypt 证书时尤为明显。例如,执行 sudo apt install certbot python3-certbot-nginx 后,使用 certbot 命令时,可能会遇到版本不兼容的错误。

例如,用户在执行以下命令时:

sudo certbot certonly --manual --preferred-challenges dns -d xxxxx.cn -d *.xxxxx.cn

可能会看到类似如下的错误信息:

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

查看 certbot 的版本:

立即学习“Python免费学习笔记(深入)”;

pon@aliyun2core2GB:~$ pip show certbotName: certbotVersion: 1.21.0Summary: ACME client...

发现 certbot 版本为 1.21.0,这是一个相对较旧的版本。

为什么会出现这种情况呢?Ubuntu 是如何管理 apt 中可下载的 Python 第三方包版本的呢?通常情况下,apt 应该自动解决依赖问题并下载一个兼容的最新版本。

实际上,经过测试发现 certbot 1.21.0 版本本身是正常工作的,并不存在不兼容的问题。问题的关键在于,在使用 apt 安装 certbot 之前,可能已经使用 pip 安装了 urllib3 这个依赖包。

查看错误信息,可以看到 urllib3 的文件路径位于 /usr/local/lib/python3.10/dist-packages,而 certbot 的文件路径位于 /usr/lib/python3/dist-packages。这是因为通过 apt install python-xxx 安装的包文件存放在 /usr/lib/python3/dist-packages,而通过 sudo pip install xxx 安装的包文件存放在 /usr/local/lib/python3.10/dist-packages。

Python 在加载包时有目录优先级,优先级如下:

/usr/local/lib/python3.10/dist-packages/usr/lib/python3/dist-packages(优先级最低)

因此,当 certbot 尝试导入 urllib3 时,会优先加载 /usr/local/lib/python3.10/dist-packages 中的 urllib3,导致版本冲突。

解决这个问题的方法有以下几种:

避免在系统中使用 pip 安装第三方包,只使用 apt 进行包管理使用虚拟环境,这样可以避免系统包与用户安装的包之间的冲突。只使用 pip 管理包,但需要确保不会与系统包产生冲突。

通过了解这些信息,用户可以更好地管理和解决使用 apt 安装的 Python 第三方包版本滞后问题。

以上就是为什么使用 apt 安装的 Python 第三方包版本会滞后?如何解决这一问题?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1360610.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何在Python中创建多进程?
上一篇 2025年12月13日 23:48:40
如何实现Python类的继承?
下一篇 2025年12月13日 23:48:52

相关推荐

发表回复

登录后才能评论
关注微信