我如何找到我的站点包目录的位置?


当前回答

前面提到的get_python_lib函数的另一个注意事项是:在某些平台上,不同的目录用于特定于平台的模块(例如:需要编译的模块)。如果将plat_specific=True传递给函数,则可以获得平台特定包的站点包。

其他回答

对于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,那么将第一个代码框复制粘贴到终端中可能是安全的。

我做了一个非常简单的函数来完成这项工作

import site


def get_site_packages_dir():
        return [p for p  in site.getsitepackages()
                if p.endswith(("site-packages", "dist-packages"))][0]

get_site_packages_dir()
# '/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages'

如果你想使用终端检索结果:

python3 -c "import site;print([p for p in site.getsitepackages() if p.endswith(('site-packages', 'dist-packages')) ][0])"

/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages


有两种类型的站点包目录,全局的和每个用户的。

全局站点包(“dist-packages”)目录列在sys. exe目录下。运行时的路径: Python -m site 要获得更简洁的列表,请在Python代码中的site模块中运行getsitepackages: Python -c '导入站点;打印(site.getsitepackages ()) 注意:在虚拟环境中,旧版本的virtualenv、sys. exe不能使用getsiteppackages。上面的Path会正确地列出virtualenv的site-packages目录。在Python 3中,你可以使用sysconfig模块: Python3 -c 'import sysconfig;打印(sysconfig.get_paths () [" purelib "])” 每个用户站点-packages目录(PEP 370)是Python安装本地包的地方: Python -m site——user-site 如果指向一个不存在的目录,检查Python的退出状态,并查看Python -m site——help了解解释。 提示:运行pip list——user或pip freeze——user会给出每个用户安装的所有站点包的列表。


实用技巧

> <包。__path__让你识别特定包的位置:(详细信息) 导入setuptools as _;打印(_.__path__)” (“/ usr / lib / python2.7 / dist-packages / setuptools”) > <模块。__file__让你识别特定模块的位置:(区别) $ python3 -c "import OS as _;打印(_.__file__)” /usr/lib/python3.6/os.py 执行pip show <package>命令显示debian风格的包信息。 $ PIP show pytest 名称:pytest 版本:3.8.2 概要:pytest:使用Python进行简单而强大的测试 主页:https://docs.pytest.org/en/latest/ 作者:Holger Krekel, Bruno Oliveira, Ronny Pfannschmidt, Floris Bruynooghe, Brianna laughher, Florian Bruhin等 Author-email:没有 许可证:MIT许可证 地点:/home/peter/.local/lib/python3.4/site-packages 需要:更多itertools, atomicwrites, setuptools, attrs, pathlib2, six, py, plug - ggy

附注:建议的解决方案(distutils.sysconfig.get_python_lib())在存在多个site-packages目录(本文推荐)时不起作用。它将只返回主site-packages目录。

唉,我也没有更好的解决办法。Python似乎不跟踪站点包目录,只跟踪其中的包。

解决方案:

在virtualenv之外-提供全局站点包的路径, 在virtualenv内部-提供virtualenv的站点包

...这是一行代码:

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有用)