Как найти расположение моего каталога Python site-packages?



Как найти расположение каталога мой сайт-пакеты?

1715   17  

17 ответов:

существует два типа каталогов site-packages,глобальные и для каждого пользователя.

  1. глобальные site-packages (" dist-packages") каталоги перечислены в sys.path при запуске:

    python -m site
    

    для более краткого списка выполнить getsitepackages С модуль сайта в коде Python:

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

    Примечание: С virtualenvs getsitepackages is недоступно,sys.path сверху будет правильно указан каталог site-packages virtualenv.

  2. The для каждого пользователя каталог site-packages (PEP 370) где Python устанавливает ваши локальные пакеты:

    python -m site --user-site
    

    если это указывает на несуществующий каталог, проверьте состояние выхода Python и см. python -m site --help для объяснения.

    подсказка: под управлением pip list --user или pip freeze --user дает вам список всех установленных для каждого пользователя сайт-пакеты.

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

(или просто первый пункт с site.getsitepackages()[0])

С " Как установить Django " документация (хотя это полезно не только для установки Django) - выполните следующее из оболочки:

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()"

...не правильно.

Он будет указывать вам!--1-->

эта папка содержит только пакеты, которые ваша операционная система автоматически установила для запуска программ.

на ubuntu, папка site-packages, содержащая пакеты, установленные через setup_tools\easy_install\pip, будет находиться в /usr/local/lib/pythonX.X/dist-packages

вторая папка, вероятно, более полезна, если случай использования связано с установкой или чтением исходного кода.

Если вы не используете Ubuntu, вы, вероятно, безопасно копируете первое поле кода в терминал.

Это то, что сработало для меня:

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 а также, если эта константа будет отличаться).

что сказал, каков контекст? Вы не должны возиться с вашим site-packages напрямую; setuptools/distutils будет работать для установки, и ваша программа может быть запущена в virtualenv, где ваш pythonpath полностью является локальным пользователем,поэтому он не должен предполагать использование системных пакетов сайта напрямую.

допустим, вы установили пакет '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.

Это для снежного барса. Но я думаю, что это должно работать в целом.

собственные системные пакеты, установленные с установкой python в системах на основе Debian, можно найти по адресу :

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

в OSX - /Library/Python/2.7/site-packages

С помощью этого небольшого кода:

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']

все ответы (или: один и тот же ответ повторяется снова и снова) неадекватны. Что вы хотите сделать это:

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

в последней строке отображается установочный каталог. Не спрашивайте меня о windows или других дисках, но поскольку это тот же самый dir, который использует easy_install по умолчанию, это, вероятно, правильно везде, где работает easy_install (так, везде, даже Mac). Повеселись. Примечание: оригинальный код имеет много ругательств в оно.

боковое Примечание: предлагаемое решение (distutils.sysconfig.get_python_lib()) не работает, когда есть несколько каталогов site-packages (как рекомендовано в статье). Он будет возвращать только основной каталог site-packages.

увы, у меня нет лучшего решения. Python, похоже, не отслеживает каталоги site-packages, а только пакеты внутри них.

это работает для меня. Он получит вам как папки 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']

дополнительно к get_python_lib функция уже упоминалось: на некоторых платформах различные каталоги используются для конкретных модулей платформы (например: модули, которые требуют компиляции). Если вы пройдете plat_specific=True в функцию вы получаете пакеты сайта для конкретных пакетов платформы.

from distutils.sysconfig import get_python_lib
print get_python_lib()

Это должно работать на всех дистрибутивах В и из виртуальной среды из-за его" низкотехнологичной " природы. Модуль ОС всегда находится в Родительском каталоге 'site-packages'

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

чтобы изменить dir на сайт-пакеты dir я использую следующий псевдоним (на *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

современный способ stdlib использует sysconfig модуль, доступный в версии 2.7 и 3.2+. Python в настоящее время использует восемь дорожки (docs):

  • stdlib: каталог, содержащий стандартные файлы библиотеки Python, которые не зависят от платформы.
  • platstdlib: каталог, содержащий стандартные файлы библиотеки Python, которые зависят от платформы.
  • platlib: каталог для специфичных для сайта и платформы файлов.
  • purelib: каталог для специфичных для сайта, не связанных с платформой файлов.
  • включить: каталог для файлов заголовков, не зависящих от платформы.
  • platinclude: каталог для специфичных для платформы заголовочных файлов.
  • скрипты каталог файлов скрипт.
  • сведения каталог файлов данных.

в большинстве случаев пользователи, обнаруживающие этот вопрос, будут заинтересованы в пути "purelib" (in в некоторых случаях, вы можете быть заинтересованы в 'platlib' тоже). В отличие от принятого в настоящее время ответа, этот метод не должен плохо себя вести в зависимости от того, активирован ли virtualenv.

на системном уровне (это Python 3.7.0 на mac OS):

>>> import sysconfig
>>> sysconfig.get_paths()['purelib']
'/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages'

С a венв, ты получишь что-то вроде этого

>>> import sysconfig                                                                                                                                                
>>> sysconfig.get_paths()['purelib']                                                                                                                                
'/private/tmp/.venv/lib/python3.7/site-packages'

сценарий оболочки также доступен для отображения этих сведений, которые можно вызвать, выполнив sysconfig как модуль:

python -m sysconfig

Примечание:sysconfig (источник) не следует путать с distutils.sysconfig подмодуля (источник) упоминается в нескольких других ответах здесь. Это совершенно другой модуль, и ему не хватает

Я должен был сделать что-то немного другое для проекта, над которым я работал: найти относительные каталог site-packages относительно базового префикса установки. Если папка site-packages была в /usr/lib/python2.7/site-packages, Я хочу /lib/python2.7/site-packages часть. Я, по сути, столкнулся с системами, где 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.

Comments

    Ничего не найдено.