如何找到自己的python位置_安装 - 如何找到Python site-packages目录的位置?
安装 - 如何找到Python site-packages目录的位置?如何找到site-packages目录的位置?18个解决方案618 votes>>> import site; site.getsitepackages()['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
安装 - 如何找到Python site-packages目录的位置?
如何找到site-packages目录的位置?
18个解决方案
618 votes
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
(或只是site.getsitepackages()[0]的第一项)
eudoxos answered 2018-12-27T03:42:25Z
298 votes
从“如何安装Django”文档(虽然这不仅仅是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())
Daryl Spitzer answered 2018-12-27T03:42:53Z
202 votes
有两种类型的站点包目录,全局和每用户。
运行时,全局站点包(“dist-packages”)目录列在pip list --user中:
pip list --user
有关更简洁的列表,请从Python代码中的站点模块运行pip list --user:
pip list --user
注意:由于virtualenvs的getitepackages不可用,但上面的pip list --user将正确列出virtualenv的site-packages目录。
每个用户的站点包目录(PEP 370)是Python安装本地包的地方:
pip list --user
如果这指向不存在的目录,请检查Python的退出状态,并参阅pip list --user以获取解释。
提示:运行pip list --user或pip freeze --user会为您提供所有已安装的每个用户站点包的列表。
Peterino answered 2018-12-27T03:42:03Z
97 votes
对于Ubuntu,
python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
...是不正确的。
它会指向/usr/local/lib/pythonX.X/dist-packages
此文件夹仅包含操作系统自动安装的程序包以供程序运行。
在ubuntu上,包含通过setup_tools \ easy_install \ pip安装的软件包的site-packages文件夹将在/usr/local/lib/pythonX.X/dist-packages
如果用例与安装或读取源代码相关,则第二个文件夹可能更有用。
如果您不使用Ubuntu,您可能会安全地将第一个代码框复制粘贴到终端中。
David Hollander answered 2018-12-27T03:43:52Z
63 votes
这对我有用:
python -m site --user-site
Ramashri answered 2018-12-27T03:44:13Z
22 votes
假设你已经安装了'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,你可以做同样的事情。
这是雪豹。 但我认为它也应该起作用。
Sumod answered 2018-12-27T03:44:47Z
21 votes
正如其他人所说,site-packages具有相关设置:
import distutils.sysconfig
print distutils.sysconfig.get_python_lib()
...虽然默认的site-packages做了一些更粗糙的事情,在下面解释:
import sys, os
print os.sep.join([sys.prefix, 'lib', 'python' + sys.version[:3], 'site-packages'])
(它还添加了site-packages并为sys.exec_prefix添加了两个路径,如果常量不同的话)。
那就是说,背景是什么? 你不应该直接搞乱你的site-packages; setuptools / distutils将用于安装,并且您的程序可能在virtualenv中运行,其中您的pythonpath完全是用户本地的,因此它不应该直接使用系统站点包。
Charles Duffy answered 2018-12-27T03:45:28Z
15 votes
在基于Debian的系统中安装python安装的本机系统包可以在以下位置找到:
/usr/lib/python2.7/dist-packages/
在OSX中 - pip
通过使用这个小代码:
from distutils.sysconfig import get_python_lib
print get_python_lib()
但是,可以在以下位置找到通过pip安装的软件包列表:
在/ usr/ local / bin目录/
或者可以简单地编写以下命令来列出python包所在的所有路径。
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
注意:位置可能会因您的操作系统而异,例如在OSX中
>>> import site; site.getsitepackages()
['/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/site-python', '/Library/Python/2.7/site-packages']
fnatic_shank answered 2018-12-27T03:46:33Z
13 votes
所有答案(或:反复重复的相同答案)都不充分。 你想要做的是:
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默认使用的dir完全相同,所以在easy_install工作的地方(因此,无处不在,甚至是mac)都可能是正确的。 玩得开心。 注意:原始代码中有许多脏话。
cheater answered 2018-12-27T03:47:01Z
11 votes
附注:当存在多个site-packages目录时(根据本文的建议),建议的解决方案(distutils.sysconfig.get_python_lib())不起作用。 它只返回主要的site-packages目录。
唉,我也没有更好的解决方案。 Python似乎没有跟踪site-packages目录,只跟踪它们中的包。
Vladimir Vagaytsev answered 2018-12-27T03:47:29Z
9 votes
这对我有用。它将为您提供dist-packages和site-packages文件夹。如果文件夹不在Python的路径上,则不会无论如何,你做得很好。
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']
just_an_old_guy answered 2018-12-27T03:47:57Z
8 votes
已经提到get_python_lib函数的附加说明:在某些平台上,不同的目录用于特定于平台的模块(例如:需要编译的模块)。 如果您将plat_specific=True传递给该函数,则会获得特定于平台的软件包的站点软件包。
Armin Ronacher answered 2018-12-27T03:48:19Z
7 votes
from distutils.sysconfig import get_python_lib
print get_python_lib()
Florian Bösch answered 2018-12-27T03:48:35Z
7 votes
这应该适用于虚拟环境中的所有分布,因为它具有“低技术”性质。 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'
Pyramid Newbie answered 2018-12-27T03:49:03Z
2 votes
回答旧问题。 但是为此使用ipython。
pip install ipython
ipython
import imaplib
imaplib?
这将给出关于imaplib包的以下输出 -
Type: module
String form:
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
Sahil Agarwal answered 2018-12-27T03:49:32Z
2 votes
现代stdlib方式使用sysconfig模块,可在2.7和3.2+版本中使用。 Python目前使用八个路径(docs):
stdlib:包含非特定于平台的标准Python库文件的目录。
platstdlib:包含特定于平台的标准Python库文件的目录。
platlib:特定于站点的平台特定文件的目录。
purelib:特定于站点的非平台特定文件的目录。
include:非平台特定头文件的目录。
platinclude:特定于平台的头文件的目录。
scripts:脚本文件的目录。
data:数据文件的目录。
在大多数情况下,发现此问题的用户会对'purelib'路径感兴趣(在某些情况下,您可能也对'platlib'感兴趣)。 与目前接受的答案不同,这种方法不应该是错误的,这取决于你是否激活了virtualenv。
在系统级(这是mac OS上的Python 3.7.0):
>>> import sysconfig
>>> sysconfig.get_paths()['purelib']
'/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages'
有了一个venv,你会得到这样的东西
>>> import sysconfig
>>> sysconfig.get_paths()['purelib']
'/private/tmp/.venv/lib/python3.7/site-packages'
shell脚本也可用于显示这些详细信息,您可以通过执行sysconfig作为模块来调用:
python -m sysconfig
注意:sysconfig(源代码)不要与这里的其他几个答案中提到的distutils.sysconfig子模块(源)相混淆。 这是一个完全不同的模块,它缺少上面讨论的get_paths功能。
wim answered 2018-12-27T03:51:18Z
0 votes
对于我正在处理的项目,我必须做一些稍微不同的事情:找到相对于基本安装前缀的相对site-packages目录。 如果site-packages文件夹在/Lib/site-packages中,我想要/lib/python3.6/site-packages部分。 事实上,我遇到site-packages在/usr/lib64中的系统,并且接受的答案对这些系统不起作用。
与骗子的答案类似,我的解决方案深入探究了Distutils的内涵,找到了实际在/Lib/site-packages内部传递的路径。想到我不希望任何人再次想到这一点,真是太痛苦了。。
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。
MultipleMonomials answered 2018-12-27T03:51:53Z
0 votes
如果已经添加到PYTHONPATH,您也可以执行类似的操作
import sys
print('\n'.join(sys.path))
filtfilt answered 2018-12-27T03:52:15Z
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)