Ubuntu 24下Python3.11规避系统包及解决Matplotlib多版本警告
解决Python3.11调用系统级包的问题(无需虚拟环境)
先给结论
可行,但绝对别直接删除/usr/lib/python3/dist-packages/路径,有更安全的替代方案。
为什么不能直接删?
这个路径是Ubuntu系统所有Python版本共享的系统包目录,哪怕你用的是单独安装的Python3.11,部分系统工具可能仍会通过它调用依赖包。直接删除轻则导致部分系统脚本失效,重则引发难以排查的系统问题,且操作不可逆,风险很高。
靠谱的替代方案
1. 单次运行时临时屏蔽系统路径
每次运行脚本前,通过PYTHONPATH环境变量指定仅加载用户本地的包路径,完全屏蔽系统路径:
PYTHONPATH="/home/<你的用户名>/.local/lib/python3.11/site-packages" python3.11 你的脚本名.py
原理:PYTHONPATH会让Python优先加载指定路径内的包,且不会读取系统默认的dist-packages目录。
2. 永久让Python3.11屏蔽系统路径
给Python3.11添加启动时自动执行的脚本,自动过滤系统路径:
- 创建Python3.11的用户配置目录:
mkdir -p ~/.config/python3.11 - 在该目录下创建
sitecustomize.py文件,写入以下内容:
此后每次启动Python3.11,该脚本都会自动运行,帮你移除系统路径。import sys # 过滤掉系统级的dist-packages路径 sys.path = [path for path in sys.path if not path.startswith('/usr/lib/python3/dist-packages')]
3. 确保本地安装的包完全独立
重新安装依赖时,添加--no-cache-dir参数避免残留系统包的缓存,确保所有包都安装在用户本地路径:
python3.11 -m pip install --user --force-reinstall --no-cache-dir -r requirements.txt
验证是否生效
运行以下命令,检查输出的路径列表中是否还有/usr/lib/python3/dist-packages/:
python3.11 -c "import sys; print('\n'.join(sys.path))"
如果看不到该路径,说明配置生效,再执行import matplotlib.pyplot应该就不会出现警告了。
内容的提问来源于stack exchange,提问作者Chicoscience
相关产品推荐
相关产品推荐

