我如何find我的Python站点包目录的位置?

我如何find我的网站包目录的位置?

有两种types的站点包目录, 全局每个用户

  1. 运行时,全局站点包(“ dist-packages ”)目录在sys.path中列出:

     python -m site 

    要获得更简洁的列表, getsitepackages从Python代码中的站点模块运行getsitepackages

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

    注意:使用virtualenvs getsitepackages不可用 ,但是上面的sys.path会正确地列出virtualenv的site-packages目录。

  2. per user site-packages目录( PEP 370 )是Python安装本地软件包的地方:

     python -m site --user-site 

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

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

(或只是第一个项目与site.getsitepackages()[0]

从“如何安装Django”文档 (尽pipe这对于Django安装不仅仅是有用的) – 从shell执行以下步骤:

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

格式化为可读性(而不是用作单行),如下所示:

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

对于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,你可能会安全地将第一个代码框粘贴到terminal中。

这对我来说是有效的:

 python -m site --user-site 

正如其他人已经注意到, 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添加了两个path,如果这个常量不同的话)。

这就是说,上下文是什么? 你不应该直接搞乱你的site-packages , setuptools / distutils将用于安装,并且你的程序可能在virtualenv中运行,pythonpath完全是用户本地的,所以它不应该直接使用系统站点包。

假设你已经安装了包“django”。 导入它并键入dir(django)。 它将向您显示该模块的所有function和属性。 inputpython解释器 –

 >>> import django >>> dir(django) ['VERSION', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'get_version'] >>> print django.__path__ ['/Library/Python/2.6/site-packages/django'] 

如果安装了mercurial,你可以做同样的事情。

这是雪豹。 但我认为它也应该一般工作。

所有的答案(或者:一遍又一遍地重复着同样的答案)是不够的。 你想要做的是这样的:

 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或其他dists,但因为它是easy_install默认使用的完全相同的目录,所以在easy_install工作的地方(如此,无处不在,甚至是mac)都可能是正确的。 玩的开心。 注意:原代码中有许多发誓词。

使用python安装安装的本地系统软件包可以在以下位置find:

/usr/lib/python2.7/dist-packages/

通过使用这个小代码:

 from distutils.sysconfig import get_python_lib print get_python_lib() 

但是,通过pip安装的软件包列表可以在以下urlfind:

在/ usr / local / bin目录/

或者可以简单地写下面的命令来列出python软件包的所有path。

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

注意:build议的解决scheme(distutils.sysconfig.get_python_lib())在有多个站点包目录( 本文推荐的 )时不起作用。 它只会返回主站点包目录。 唉,我也没有更好的解决scheme。 Python似乎没有跟踪站点包目录,只是它们中的包。

这对我有用。 它会让你两个dist-packages和site-packages文件夹。 如果该文件夹不在Python的path上,反正它不会对你有什么好处。

 import sys; print [f for f in sys.path if f.endswith('packages')] 

输出(Ubuntu安装):

 ['/home/username/.local/lib/python2.7/site-packages', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages'] 

已经提到了get_python_lib函数的一个附加说明:在某些平台上,不同的目录被用于特定于平台的模块(例如:需要编译的模块)。 如果您将plat_specific=True传递给函数,您将获得平台特定软件包的站点软件包。

 from distutils.sysconfig import get_python_lib print get_python_lib() 

这应该适用于虚拟环境内外的所有分布,因为它是“低科技”的。 os模块总是驻留在“site-packages”的父目录中,

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

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

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

回答老问题。 但是使用ipython。

 pip install ipython ipython import imaplib imaplib? 

这将给出关于imaplib包的以下输出 –

 Type: module String form: <module 'imaplib' from '/usr/lib/python2.7/imaplib.py'> File: /usr/lib/python2.7/imaplib.py Docstring: IMAP4 client. Based on RFC 2060. Public class: IMAP4 Public variable: Debug Public functions: Internaldate2tuple Int2AP ParseFlags Time2Internaldate