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


当前回答

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

全局站点包(“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

其他回答

这对我来说很管用:

python -m site --user-site

所有的答案(或者:重复同样的答案)都是不充分的。你要做的是:

from setuptools.command.easy_install import easy_install
class easy_install_default(easy_install):
  """ class easy_install had problems with the fist parameter not being
      an instance of Distribution, even though it was. This is due to
      some import-related mess.
      """

  def __init__(self):
    from distutils.dist import Distribution
    dist = Distribution()
    self.distribution = dist
    self.initialize_options()
    self._dry_run = None
    self.verbose = dist.verbose
    self.force = None
    self.help = 0
    self.finalized = 0

e = easy_install_default()
import distutils.errors
try:
  e.finalize_options()
except distutils.errors.DistutilsError:
  pass

print e.install_dir

最后一行显示了安装目录。适用于Ubuntu,而上面的不能。不要问我关于windows或其他目录的问题,但由于它是easy_install默认使用的完全相同的目录,所以它可能在easy_install工作的任何地方都是正确的(所以,任何地方,甚至mac)。玩得开心。注意:原始代码中有很多脏话。

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

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

之前没有提到的一些东西,我认为是有用的,如果你安装了两个版本的Python,比如3.8和3.5,在你的机器上可能有两个名为site-packages的文件夹。在这种情况下,您可以使用以下命令指定python版本:

py -3.5 -c "import site; print(site.getsitepackages()[1])

对于我正在从事的一个项目,我必须做一些稍微不同的事情:找到相对于基本安装前缀的相对site-packages目录。如果site-packages文件夹在/usr/lib/python2.7/site-packages中,我想要/lib/python2.7/site-packages部分。事实上,我遇到过站点包在/usr/lib64中的系统,接受的答案在这些系统上不起作用。

与作弊者的答案类似,我的解决方案深入Distutils的内部,以找到在setup.py中实际传递的路径。搞清楚这件事让我很痛苦,我不想让任何人再搞清楚这件事。

import sys
import os
from distutils.command.install import INSTALL_SCHEMES

if os.name == 'nt':
    scheme_key = 'nt'
else:
    scheme_key = 'unix_prefix'

print(INSTALL_SCHEMES[scheme_key]['purelib'].replace('$py_version_short', (str.split(sys.version))[0][0:3]).replace('$base', ''))

这应该打印类似/Lib/site-packages或/Lib/ python3.6/site-packages之类的东西。