在Debian容器中如何正确查找Python的site-packages目录
你没有使用错误的查询代码,出现路径不匹配是Debian系列发行版对Python路径规则做了定制改造导致的。
三个路径的差异说明
/usr/lib/python3.9/site-packages:属于Python官方默认约定的标准路径,Debian系发行版默认不会使用该目录存放任何第三方包,因此不存在属于正常情况。/usr/lib/python3/dist-packages:是Debian系为apt包管理器安装的Python包预留的专属路径,你通过apt install python3-*命令安装的所有Python组件都会存放在这里,和pip安装的包互相隔离。/usr/local/lib/python3.9/dist-packages:是Debian系为root身份执行的全局pip安装预留的路径,你的容器中默认操作身份是root,因此所有pip安装的包都会写入该目录。
正确查询pip实际安装路径的方法
如果需要准确获取当前pip实际使用的安装路径,可以使用两种方案:
- 命令行直接查询
# 查询任意已安装包的存放路径即可得到pip的通用安装目录 pip show pip | grep Location
- Python代码中查询
# 方案1:调用pip内置逻辑,兼容性最高 import pip._internal print(pip._internal.locations.get_site_packages()) # 方案2:指定Debian专属的scheme参数调用sysconfig import sysconfig print(sysconfig.get_paths(scheme='deb_system')['purelib'])
之前查询结果异常的原因
sysconfig.get_paths()默认使用posix_prefix标准scheme,没有适配Debian的路径定制规则,因此返回的是Python官方默认的无效路径。distutils.sysconfig.get_python_lib()默认返回的是apt包的安装路径,和pip全局安装路径无关。
内容的提问来源于stack exchange,提问作者thebjorn
相关产品推荐
相关产品推荐

