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


当前回答

解决方案:

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

其他回答

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

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)。玩得开心。注意:原始代码中有很多脏话。

假设你已经安装了“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,您也可以做同样的事情。

这是给雪豹的。但我认为它在一般情况下也适用。

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

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

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

这应该适用于虚拟环境内外的所有发行版,因为它是“低技术”性质。os模块总是位于'site-packages'的父目录中

import os; print(os.path.dirname(os.__file__) + '/site-packages')

要将dir更改为site-packages dir,我使用以下别名(在*nix系统上):

alias cdsp='cd $(python -c "import os; print(os.path.dirname(os.__file__))"); cd site-packages'