pip show 看到的是包,不是模块
pip list查看所有安装的包
pip show click 看到的是 包(package),而不是单个模块文件:
pip show click
# 显示的是包信息,如版本、位置、依赖等
# Location: /usr/local/lib/python3.8/site-packages
包 ≠ 模块文件:
模块(module):单个 .py 文件
包(package):包含 __init__.py 的目录,可以包含多个模块
find / -name "click.py" 2>/dev/null # 找不到!因为 click 是包,不是 click.py 文件
find / -name "*click*" 2>/dev/null # 会搜出大量无关文件: # - 日志文件中的 click # - 注释中的 click # - 其他软件的 click # - 缓存文件
find / -name "click*" 2>/dev/null # 会扫描整个文件系统,非常慢 # 而且可能没有权限访问某些目录
| 查看包信息 | pip show click |
✅ 最标准,显示包位置 |
| 查看包位置 | python -c "import click; print(click.__file__)" |
✅ 最准确 |
| 查看包列表 | pip list | grep click |
✅ 查看是否安装 |
| find 搜索文件 | find / -name "click.py" 2>/dev/null |
❌ 找不到(因为是包) |
| find 搜索目录 | find / -name "click" -type d 2>/dev/null |
⚠️ 能找到,但慢且可能误报 |
click 包的结构: /usr/local/lib/python3.8/site-packages/ └── click/ # ← 这是包目录 ├── __init__.py # ← 这是模块文件 ├── core.py # ← 这也是模块文件 ├── decorators.py └── ... 所以: import click → 导入的是 click/__init__.py from click import core → 导入的是 click/core.py pip show click → 显示的是整个 click 包的信息 # 如果想找 click 包的所有文件 pip show -f click # 或者进入 site-packages 查看__init__.py包的入口文件 python -c "import click; print(click.__file__)" # 然后 ls 那个目录
# 使用 python -m pip 来确保环境一致 python -m pip list | grep click python -m pip show click