如何找到我的Python site-packages目录位置?

1416 投票
22 回答
1655268 浏览
提问于 2025-04-11 09:24

我该如何找到我的 site-packages 目录的位置?

22 个回答

384

这个解决方案有两个特点:

  • 在虚拟环境外面时,它能提供全局的包路径,
  • 在虚拟环境里面时,它能提供虚拟环境的包路径。

这个功能可以用一行代码实现:

python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"

为了更容易阅读,这段代码可以格式化成如下样子:

from distutils.sysconfig import get_python_lib
print(get_python_lib())


来源:来自一个非常旧的版本的“如何安装Django”文档(虽然这对不仅仅是Django的安装有用)

700
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

(或者直接用 site.getsitepackages()[0] 获取第一个项目)

1097

网站包目录有两种类型,分别是 全局用户专用

  1. 全局 网站包目录(也叫 "dist-packages")在你运行以下命令时会出现在 sys.path 列表中:

     python -m site
    

    如果你想要更简洁的列表,可以在 Python 代码中运行 getsitepackages,它来自于 site 模块

     python -c 'import site; print(site.getsitepackages())'
    

    注意: 在虚拟环境中,getsitepackages 在旧版本的 virtualenv 中不可用,不过上面的 sys.path 仍然能正确列出虚拟环境的包目录。在 Python 3 中,你可以使用 sysconfig 模块 来替代:

     python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])'
    
  2. 用户专用 网站包目录(PEP 370)是 Python 安装你本地包的地方:

     python -m site --user-site
    

    如果这个目录指向一个不存在的地方,检查一下 Python 的退出状态,并查看 python -m site --help 来获取解释。

    提示: 运行 pip list --userpip freeze --user 可以列出所有已安装的 用户专用 网站包。


实用小贴士

  • <package>.__path__ 可以帮助你找到特定包的位置:(详细信息

      $ python -c "import setuptools as _; print(_.__path__)"
      ['/usr/lib/python2.7/dist-packages/setuptools']
    
  • <module>.__file__ 可以帮助你找到特定模块的位置:(区别

      $ python3 -c "import os as _; print(_.__file__)"
      /usr/lib/python3.6/os.py
    
  • 运行 pip show <package> 可以显示 Debian 风格的包信息:

      $ pip show pytest
      Name: pytest
      Version: 3.8.2
      Summary: pytest: simple powerful testing with Python
      Home-page: https://docs.pytest.org/en/latest/
      Author: Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, Floris Bruynooghe, Brianna Laugher, Florian Bruhin and others
      Author-email: None
      License: MIT license
      Location: /home/peter/.local/lib/python3.4/site-packages
      Requires: more-itertools, atomicwrites, setuptools, attrs, pathlib2, six, py, pluggy
    

撰写回答