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


当前回答

对于我正在从事的一个项目,我必须做一些稍微不同的事情:找到相对于基本安装前缀的相对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之类的东西。

其他回答

from distutils.sysconfig import get_python_lib
print get_python_lib()

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

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


PIP展会将提供有关包装的所有细节: 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])")

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

老问题的答案。但是使用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