Подтвердить что ты не робот

Создание вторичного каталога сайтов-пакетов (и загрузка пакетов из .pth файлов в нем)

Я хотел бы установить некоторые пакеты в сторонний каталог site-packages (помимо стандартных расположений системы). Есть ли способ установить это так, чтобы соблюдались файлы .pth?


Фон: я использую OS X, virtualenv и homebrew. В моем случае есть несколько пакетов (в частности, wxPython), которые не устанавливаются красиво через pip в virtualenv. В этих случаях есть домашние пакеты, которые работают вместо них. Homebrew создает третью папку пакетов сайтов в /usr/local/lib/python2.7. Я хотел бы просто указать на эту папку и оставить содержание всех элементов там под brew. Кажется, однако, что это невозможно.

Я, конечно, не единственный, кто интересуется этой проблемой. Я бы поставил большое количество общих вопросов "pth files not working" и сообщений в Интернете, которые я наткнулся на них, связаны с этой проблемой. Есть ли хорошее решение?

4b9b3361

Ответ 1

Взгляните на модуль site. Он предоставляет функцию addsitedir, которая должна делать то, что вы хотите.

Самый простой способ использовать это - создать файл с именем sitecustomize.py или usercustomize.py и поместить его в текущий каталог PYTHONPATH (или любой каталог, который заканчивается на sys.path), со следующим содержимым:

import site
site.addsitedir('/usr/local/lib/python2.7')

При запуске Python предпринимается попытка импортировать sitecustomize, а затем usercustomize, поэтому это работает. Из документации сайта:

После этих манипуляций с путями сделана попытка импортировать модуль с именем sitecustomize, который может выполнять произвольные настройки для конкретного сайта. Обычно он создается системным администратором в каталоге site-packages. Если этот импорт завершился с ошибкой ImportError, он молча игнорируется.

После этого делается попытка импортировать модуль с именем usercustomize, который может выполнять произвольные пользовательские настройки, если ENABLE_USER_SITE - true. Этот файл предназначен для создания в каталоге пользовательских сайтов-пакетов (см. Ниже), который является частью sys.path, если не отключен с помощью -s. ImportError будет игнорироваться.

Ответ 2

Был PEP 370, специально предназначенный для создания каталогов для пользователей site-packages, чтобы справиться с ситуацией, когда у пользователя нет доступ администратора к общесистемному site-packages.

Например, в Unix (включая Mac OS) и при условии, что один использует Python 3.6, можно создать следующий каталог и разместить там .pth файлы

~/.local/lib/python3.6/site-packages