pip show 不能直接显示源代码路径,但其 location 字段指向包安装根目录,源代码位于该路径下的对应子目录中;更精准的方式是 import pkg; print(pkg.__file__)。

pip show 能不能看到源代码路径
pip show 只显示包的元信息(作者、版本、依赖、安装位置等),不展示源码本身,但它的 Location 字段是关键入口——源代码就藏在那个路径里。
执行 pip show requests 后你会看到类似这样的输出:
Name: requests Version: 2.31.0 Location: /usr/local/lib/python3.11/site-packages ...
注意 Location 值,它指向的是该 Python 环境下所有已安装包的根目录。真正的源码不在这个路径下,而是在它子目录中,具体取决于包是否以「纯 Python 源码」方式安装,还是编译后安装(如 C 扩展)。
怎么快速定位并打开包的源代码文件
大多数纯 Python 包的源码会解压到 site-packages 下的同名目录或 -*.dist-info 相邻的目录中;有些则用 .egg-info 或直接是命名一致的文件夹(如 requests/)。
实操建议:
- 先用
pip show <pkg></pkg>拿到Location - cd 进去,用
ls | grep -i "<pkg>"</pkg>(Linux/macOS)或dir *<pkg>*</pkg>(Windows)找对应目录 - 常见命名形式:
requests/、numpy-1.24.3.dist-info/(旁边通常有numpy/)、django/ - 如果包是可编辑安装(
pip install -e .),Location就直接指向你本地项目根目录,源码即所见
用 pip show + python -c 一行查源码路径
手动翻目录太慢?可以用 Python 内置机制直接解析:
python -c "import requests; print(requests.__file__)"
这比 pip show 更准——它给出的是实际被 import 的模块文件路径,哪怕包用了 namespace package、PEP 561 类型提示分离、或通过 zipimport 加载,也能命中。
注意点:
- 如果报
ModuleNotFoundError,说明没装或环境不对(比如用的不是当前激活的 venv) - 如果输出是
.pyc文件,说明是缓存字节码,对应.py就在同目录下(去掉c后缀) - 对于 C 扩展(如
numpy的核心部分),__file__指向的是.so或.dll,这时得去 GitHub 或 PyPI 页面看源码
想在线看或下载源码,别只盯着本地
很多包在 pip show 输出里带 Project URL 或 Home-page,点开基本就是 GitHub/GitLab 仓库地址。这是最权威的源码来源,尤其适合:
- 看还没 release 的新功能(main 分支)
- 确认某个 bug 是否已被修复(查 commit 或 issue)
- 理解 C 扩展逻辑(
.c、.pyx文件本地不暴露) - 对比不同版本差异(比如
pip install requests==2.28.0和2.31.0的models.py)
顺手记个技巧:PyPI 页面右上角常有 “Download files” 链接,点进去选 Source Distribution (.tar.gz),解压后结构最接近原始开发态。
真正容易被忽略的是:包可能根本没把全部源码放进 wheel —— 比如测试文件、构建脚本、文档源码默认不打包。想看全貌,必须回上游仓库。











