最可靠的方式是用 pip show 查单个包的安装位置,其 location 字段明确指向实际存放目录;或用 import xxx; print(xxx.__file__) 查已导入模块的具体文件路径。

直接用 pip show 查,比翻环境变量或猜路径靠谱得多。
用 pip show 查单个包的安装位置
这是最常用也最稳的方式。它会明确告诉你 Location 字段,也就是该包解压后实际存放的目录。
- 运行
pip show requests,输出里会有类似Location: C:\Users\Alice\AppData\Local\Programs\Python\Python313\Lib\site-packages的行 - 这个路径是 Python 运行时真正 import 到的物理位置,不是虚拟环境符号链接后的“假路径”
- 如果包是通过
pip install -e .安装的(开发模式),Location会指向你本地源码目录,不是拷贝过去的副本
用 python -c "print(__import__('site').getsitepackages())" 查所有 site-packages 目录
当你要确认当前 Python 解释器默认往哪写包,或者排查多个环境混用时,这条命令能一次性列出所有可能的包安装根目录。
- Windows 上通常返回两个路径:用户级
AppData\Roaming\Python\Python313\site-packages和系统级Lib\site-packages - 虚拟环境中只返回一个路径,且是
venv\Lib\site-packages,不包含全局路径 - 注意:这个命令不保证每个路径都真实存在,只是 Python 认为“合法”的搜索位置列表
用 import xxx; print(xxx.__file__) 查模块文件具体路径
适合已经 import 成功的模块,尤其是想知道某个子模块(比如 requests.api)到底加载自哪个 .py 文件。
- 执行
import numpy; print(numpy.__file__),输出可能是C:\...\site-packages\numpy\__init__.py - 对纯 C 扩展模块(如
_ssl),__file__可能不存在,这时会报AttributeError - 如果模块被 patch 过(比如用
patch或 monkey-patch),__file__仍指向原始位置,不代表当前行为来源
别依赖 pip list 或 conda list 的输出来推断路径——它们只列名字和版本;也别手动拼接 site-packages 路径,因为 Windows 用户级安装、虚拟环境、MS Store 版 Python 的路径结构差异很大。真要定位文件,就老实用 pip show 或 __file__,这两者不会撒谎。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











