我该如何找到我的site-packages
目录的位置?
有两种site-packages目录:全局和针对每个用户的。
Global site-packages ("dist-packages") directories are listed in sys.path
when you run:
python -m site
For a more concise list run getsitepackages
from the site module in Python code:
python -c 'import site; print(site.getsitepackages())'
Caution: In virtual environments getsitepackages is not available with older versions of virtualenv
, sys.path
from above will list the virtualenv's site-packages directory correctly, though. In Python 3, you may use the sysconfig module instead:
python3 -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])'
The per user site-packages directory (PEP 370) is where Python installs your local packages:
python -m site --user-site
If this points to a non-existing directory check the exit status of Python and see python -m site --help
for explanations.
Hint: Running pip list --user
or pip freeze --user
gives you a list of all installed per user site-packages.
<package>.__path__
lets you identify the location(s) of a specific package: (details)
$ python -c "import setuptools as _; print(_.__path__)"
['/usr/lib/python2.7/dist-packages/setuptools']
<module>.__file__
lets you identify the location of a specific module: (difference)
$ python3 -c "import os as _; print(_.__file__)"
/usr/lib/python3.6/os.py
Run pip show <package>
to show Debian-style package information:
$ 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
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
命令获取站点特定模块的目录 (无论是在虚拟环境内还是外部都适用,此命令也适用于 Python 2 和 3)。 - jfspython -c "import site; print(site.getsitepackages()[0])"
。 - Brent Faust>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
(或者只使用 site.getsitepackages()[0]
的第一个项)getsitepackages
方法时出现了 AttributeError: 'module' object has no attribute 'getsitepackages'
的错误提示。然而,下面的 distutils 解决方案可以解决该问题。 - radtekhasattr(sys,'real_prefix')
来检测venv,然后通过[p for p in sys.path if p.endswith('site-packages')][-1]
的启发式方式来确定站点包(site packages),在执行[-1]
之前还需要检查是否找到一个。 - eudoxos一个解决方案,它:
...就是这个一行代码:
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安装有用)
/usr/lib/python3/dist-packages
而不是/usr/lib/python3.5/dist-packages
。请帮我看看这个问题。 - Delgan针对Ubuntu操作系统,
python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
这是不正确的。
它将指向/usr/lib/pythonX.X/dist-packages
文件夹,该文件夹仅包含操作系统自动安装以供程序运行的软件包。
在Ubuntu上,通过setup_tools\easy_install\pip安装的软件包所在的site-packages文件夹位于/usr/local/lib/pythonX.X/dist-packages
。
如果使用情况与安装或阅读源代码有关,则第二个文件夹可能更有用。
如果您不使用Ubuntu,则将第一个代码框复制并粘贴到终端中可能是比较安全的。
module.__file__
是更好的方式。如果他们正在尝试安装软件包...直接使用工具即可。 - Tobu'/usr/lib/pythonX.X/dist-packages' in site.getsitepackages()
位于列表中 /usr/local/...
之后。你只能通过 sudo pip
将某些东西放入 /usr/local
中,并且在Ubuntu上不应该使用 sudo pip
,除非你决定制作自己的发行版:如果你使用 sudo pip
,则有责任确保通过 sudo apt
或 sudo pip
安装的当前和未来 python 模块的所有依赖项都是兼容的。请考虑 创建 virtualenv
的原因。 - jfspython -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
, I get ModuleNotFoundError: No module named 'requests_unixsocket'
- Timo这是对我有效的解决方法:
python -m site --user-site
~/.local/lib/python2.7/site-packages
)。 - Neil Traftvirtualenv
,它会抱怨该包不存在。我该如何调用自定义位置安装的包? - AbtPstsysconfig
模块,该模块在2.7版本和3.2+版本中可用。与当前被接受的答案不同,这种方法仍然适用,无论您是否激活了虚拟环境。sysconfig
(source)与其他答案中提到的distutils.sysconfig
子模块(source)混淆。后者是一个完全不同的模块,缺少下面讨论的get_paths
函数。此外,distutils
在Python 3.10中已被弃用,并在Python 3.12中移除。pip
这样的工具安装的地方。# Linux
$ python3 -c "import sysconfig; print(sysconfig.get_path('purelib'))"
/usr/local/lib/python3.8/site-packages
# macOS (brew installed python3.8)
$ python3 -c "import sysconfig; print(sysconfig.get_path('purelib'))"
/usr/local/Cellar/python@3.8/3.8.3/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages
# Windows
C:\> py -c "import sysconfig; print(sysconfig.get_path('purelib'))"
C:\Users\wim\AppData\Local\Programs\Python\Python38\Lib\site-packages
# Linux
/tmp/.venv/lib/python3.8/site-packages
# macOS
/private/tmp/.venv/lib/python3.8/site-packages
# Windows
C:\Users\wim\AppData\Local\Temp\.venv\Lib\site-packages
sysconfig.get_paths()
返回一个包含所有相关安装路径的字典,例如在Linux上:>>> import sysconfig
>>> sysconfig.get_paths()
{'stdlib': '/usr/local/lib/python3.8',
'platstdlib': '/usr/local/lib/python3.8',
'purelib': '/usr/local/lib/python3.8/site-packages',
'platlib': '/usr/local/lib/python3.8/site-packages',
'include': '/usr/local/include/python3.8',
'platinclude': '/usr/local/include/python3.8',
'scripts': '/usr/local/bin',
'data': '/usr/local'}
sysconfig
作为一个模块来调用它。python -m sysconfig
正如一些评论者所指出的那样,Debian系统(以及作为其派生版本的Ubuntu)的sysconfig结果并不准确。当用户使用pip安装软件包时,它将被安装到dist-packages而不是site-packages,根据Debian关于Python打包的政策。
这种差异的根本原因是因为Debian修补了distutils的安装布局,以正确反映他们对站点的更改,但他们未能修补sysconfig模块。
例如,在Ubuntu 20.04.4 LTS(Focal Fossa)上:
root@cb5e85f17c7f:/# python3 -m sysconfig | grep packages
platlib = "/usr/lib/python3.8/site-packages"
purelib = "/usr/lib/python3.8/site-packages"
root@cb5e85f17c7f:/# python3 -m site | grep packages
'/usr/local/lib/python3.8/dist-packages',
'/usr/lib/python3/dist-packages',
USER_SITE: '/root/.local/lib/python3.8/site-packages' (doesn't exist)
platlib
,例如/usr/local/lib/python3.6/site-packages
?传统上,本地安装的东西应该放在/usr/local
中。 - eudoxos--system-site-packages
创建的 venv 中,这不会列出所有搜索的目录 - 特别是仍然被搜索的系统站点目录在此处未列出... - T Ssysconfig
模块在 Debian/Ubuntu 及其衍生版本上无法生成正确的路径,而 distutils.sysconfig
模块可以。 - rdb假设您已经安装了包'django'。导入它并键入dir(django)。它将显示该模块的所有函数和属性。在Python解释器中键入 -
>>> import django
>>> dir(django)
['VERSION', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'get_version']
>>> print django.__path__
['/Library/Python/2.6/site-packages/django']
如果您已安装mercurial,您也可以做同样的事情。
这是适用于Snow Leopard的。但我认为它通常也适用。
- Dannidimport pg print pg.path 最近的调用记录(Traceback)(最近的是最先显示的): 文件 "<stdin>", 行 1, in <module> AttributeError: 'module'对象没有属性'path'
django.__file__
而不是 __path__
。并且,这并不保证与 site-packages 有任何关系,但对于像 Django 这样的东西,你很可能已经通过 pip 安装,当你匆忙时它会派上用场,并且也可以用于其他目的(例如从文件系统读取默认配置文件)。 - JL Peyretfoo.bar
包的路径:python -c "import foo.bar as _; print(_.__path__[0])"
。 - snark就像其他人已经指出的那样,distutils.sysconfig
具有相关的设置:
import distutils.sysconfig
print distutils.sysconfig.get_python_lib()
...虽然默认的site.py
做法有点粗糙,可以简述如下:
import sys, os
print os.sep.join([sys.prefix, 'lib', 'python' + sys.version[:3], 'site-packages'])
它还添加了${sys.prefix}/lib/site-python
路径,并在sys.exec_prefix
的两个路径中都添加了这些路径(如果该常量不同的话)。
话虽如此,背景是什么?您不应直接操作site-packages
;setuptools/distutils适用于安装,您的程序可能在虚拟环境中运行,其中pythonpath完全是用户本地的,因此它也不应假定直接使用系统site-packages。
python2
,无论是否使用virtualenv都非常可靠,但是完全不能在python3
上工作。 - jitterpython3
的任何答案或其他答案进行投票。 - jitter使用pip show命令可以获取有关软件包的所有详细信息:https://pip.pypa.io/en/stable/reference/pip_show/ [pip show][1]
要获取软件包的位置:
pip show <package_name>| grep Location
在Linux中,您可以通过以下方式进入site-packages文件夹:
cd $(python -c "import site; print(site.getsitepackages()[0])")
pip3 show foo | grep Location | cut -d ' ' -f 2
。 - cmaceacherncut
是 GNU 核心工具 https://www.gnu.org/software/coreutils/manual/html_node/The-cut-command.html - xcvbnfindstr
而不是 grep
。 因此,python -m pip show numpy | findstr "Location"
可以得到 Location: c:\users\bballdave025\appdata\local\programs\python\python38\lib\site-packages
。 你用 pip
安装的模块在 site packages
中。你可以相当确定的是,在被 python -m pip ...
调用时,site-packages
即为 pip
的位置。 因此,python -m pip show pip | findstr "Location"
显示的路径与我们从 numpy
得到的路径相同。除了 pip
,你也可以尝试在 NIX 或 Win 中使用 virtualenv
(venv
) 和 setuptools
。 - bballdave025在基于Debian的系统中,使用Python安装时安装的原生系统包可以在以下位置找到:
/usr/lib/python2.7/dist-packages/
在OS X上 - /Library/Python/2.7/site-packages
您可以使用以下简短代码进行操作:
from distutils.sysconfig import get_python_lib
print get_python_lib()
然而,通过pip
安装的软件包列表可以在以下位置找到:
/usr/local/bin/
或者可以简单地输入以下命令来列出所有Python软件包所在的路径。
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
注意:位置可能因您的操作系统而异,例如在OSX中。
>>> import site; site.getsitepackages()
['/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/site-python', '/Library/Python/2.7/site-packages']
site.getsitepackages()
,因此显示了 dist-packages,其他安装将显示 site-packages。 - fnatic_shank
pip show <软件包名称>
。 - joshuakcockrell