有一次遇到了一个不管在什么Python路径下,使用pip list都会出现一个系统目录下的所有的python源的问题,反复使用anaconda安装和卸载环境也不好用
发现问题的过程:
正常的python -m site输出
1 2 3 4 5 6 7 8 9 10 11
| > python -m site sys.path = [ '/home/tipriest', '/home/tipriest/anaconda3/lib/python311.zip', '/home/tipriest/anaconda3/lib/python3.11', '/home/tipriest/anaconda3/lib/python3.11/lib-dynload', '/home/tipriest/anaconda3/lib/python3.11/site-packages', ] USER_BASE: '/home/tipriest/.local' (exists) USER_SITE: '/home/tipriest/.local/lib/python3.11/site-packages' (doesn't exist) ENABLE_USER_SITE: True
|
1 2 3 4 5 6 7 8 9 10 11
| > python -m site sys.path = [ '/home/tipriest', '/home/tipriest/anaconda3/envs/rag2/lib/python310.zip', '/home/tipriest/anaconda3/envs/rag2/lib/python3.10', '/home/tipriest/anaconda3/envs/rag2/lib/python3.10/lib-dynload', '/home/tipriest/anaconda3/envs/rag2/lib/python3.10/site-packages', ] USER_BASE: '/home/tipriest/.local' (exists) USER_SITE: '/home/tipriest/.local/lib/python3.10/site-packages' (doesn't exist) ENABLE_USER_SITE: True
|
不正常的python -m site输出
可以看到,
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ls@ls:~$ conda activate open-mmlab (open-mmlab) ls@ls:~$ python -m site sys.path = [ '/home/ls', '/opt/ros/noetic/lib/python3/dist-packages', '/home/ls/anaconda3/envs/open-mmlab/lib/python38.zip', '/home/ls/anaconda3/envs/open-mmlab/lib/python3.8', '/home/ls/anaconda3/envs/open-mmlab/lib/python3.8/lib-dynload', '/home/ls/.local/lib/python3.8/site-packages', '/home/ls/anaconda3/envs/open-mmlab/lib/python3.8/site-packages', ] USER_BASE: '/home/ls/.local' (exists) USER_SITE: '/home/ls/.local/lib/python3.8/site-packages' (exists) ENABLE_USER_SITE: True
|
临时解决方案
在.bashrc
中加入export PYTHONNOUSERSITE=1
,加入之后的效果,之后再source的时候就对了,不同的环境不会都是一个pip 的源了,能够很好地解决问题
1 2 3 4 5 6 7 8 9 10 11 12
| (open-mmlab) ls@ls:~$ python -m site sys.path = [ '/home/ls', '/opt/ros/noetic/lib/python3/dist-packages', '/home/ls/anaconda3/envs/open-mmlab/lib/python38.zip', '/home/ls/anaconda3/envs/open-mmlab/lib/python3.8', '/home/ls/anaconda3/envs/open-mmlab/lib/python3.8/lib-dynload', '/home/ls/anaconda3/envs/open-mmlab/lib/python3.8/site-packages', ] USER_BASE: '/home/ls/.local' (exists) USER_SITE: '/home/ls/.local/lib/python3.8/site-packages' (exists) ENABLE_USER_SITE: False
|
python -m site
命令的作用
python -m site
这条命令的作用是 输出当前 Python 解释器的站点配置信息,包括模块搜索路径(sys.path
)、用户和系统级别的包安装目录(site-packages
)等。以下是详细解释:
功能解析
显示模块搜索路径(sys.path
)
显示用户和系统站点目录
- 输出用户专属的包安装目录(如
~/.local/lib/python3.x/site-packages
),以及系统全局的包安装目录(如 /usr/lib/python3.x/site-packages
)。
启用或禁用用户站点目录
- 根据配置,Python 可能会自动添加用户级别的
site-packages
目录到模块搜索路径。通过此命令可以检查该功能是否开启。
调试路径问题
- 当模块导入失败或路径冲突时,此命令可帮助开发者快速定位路径配置问题。
示例输出
执行 python -m site
的典型输出如下:
1 2 3 4 5 6 7 8 9
| sys.path = [ '/usr/lib/python3.x', '/usr/lib/python3.x/lib-dynload', '/home/user/.local/lib/python3.x/site-packages', '/usr/local/lib/python3.x/dist-packages', ] USER_BASE: '/home/user/.local' (存在) USER_SITE: '/home/user/.local/lib/python3.x/site-packages' (存在) ENABLE_USER_SITE: True
|
输出中,sys.path
是模块搜索路径列表,USER_BASE
和 USER_SITE
是用户专属的包安装目录,ENABLE_USER_SITE
表示是否启用用户站点目录。
用途场景
检查虚拟环境配置 在虚拟环境中运行此命令,可确认是否成功隔离了全局路径。
验证自定义路径 若通过 PYTHONPATH
添加了自定义路径,可确认是否生效。
调试模块导入问题 当出现 ModuleNotFoundError
时,检查 sys.path
是否包含目标模块所在目录。
相关参数
--user-base
:仅输出用户专属的包安装根目录(如 ~/.local
)。
--user-site
:仅输出用户专属的 site-packages
目录路径。
-s
(--no-site-packages
):禁用系统级别的 site-packages
(常用于虚拟环境)。
参考资料
- 解释了
site
模块的作用及 python -m
的运行机制。