Intereting Posts
вывести номер строки и шаблон в файл одновременно Curl or Lynx: возможно ли снятие Javascript? Запись журналов на удаленном сервере с помощью rsyslog Скопировать права доступа к файлам от пользователя к группе Как закрыть список серверов, чтобы убедиться, что первый отключен, прежде чем отключать следующий? Автоматизировать процесс удаления отводных устройств Конфигурация IPv6 pfSense Сценарий оболочки для выполнения сеанса telnet в ser2net Как вернуть направление для последнего ярлыка параметра? поместить специальный символ или пробел, если шаблон не найден Как печатать ip с iftop, отсортированным по использованию полосы пропускания Как изменить DISPLAY, на котором работает X-приложение (в Linux)? Как избавиться от спама `mosh“ last -f / var / log / wtmp`? Проблема с установкой MEncoder Есть ли дистрибутив с установщиком, который может автоматически выполнять LVM над LUKS со всем, что при необходимости согласовано?

Настройка Python для включения другого каталога при поиске пакетов

Я нахожусь на машине SUSE, где по умолчанию местоположение сайта Python – это /usr/lib64/python2.6/site-packages . Некоторые пакеты автоматически устанавливаются в /usr/lib/python2.6/site-packages . Как настроить Python так, чтобы он также просматривался в /usr/lib64/python2.6/site-packages ?

(Пожалуйста, исправьте ошибки и пропуски при необходимости.).

Во-первых, вопрос и комментарий. Я не использую SUSE, поэтому возьмите это с щепоткой соли. Являются ли пакеты, которые устанавливаются в /usr/lib/python2.6/site-packages официальные пакеты? Если это так, SUSE сломан, так что это маловероятно. Если они не являются официальными пакетами, вы можете либо попросить упаковщиков использовать стандартные пути, либо, альтернативно, вы можете отправить ошибку списка пожеланий, чтобы SUSE попросил их поддержать этот дополнительный путь. Это избавит вас и других людей от дополнительных головных болей.

На данный момент у вас есть следующие возможности в порядке уменьшения масштаба:

  1. Измените путь поиска модуля для всех пользователей (метод 1)

    Измените путь поиска модуля в установке Python.

    Путь поиска модуля по умолчанию подключен к двоичному файлу. Пути надстройки можно настроить во время выполнения, например, в файле site.py. Например, Debian использует /usr/lib/python2.6/site.py (для установки по умолчанию python 2.6), чтобы выполнить свою конфигурацию для конкретного сайта. В верхней части файла написано

     Append module search paths for third-party packages to `sys.path`. **************************************************************** * This module is automatically imported during initialization. * **************************************************************** [...] This will append site-specific paths to the module search path. 

    Патч debian/patches/site-locations.diff Debian говорит:

    Для Debian и производных этот sys.path дополняется каталогами для пакетов, распределенных в дистрибутиве. Локальные аддоны входят в / usr / local / lib / python / dist-packages, Debian addons устанавливаются в / usr / {lib, share} / python / dist-packages. / usr / lib / python / site-packages не используется.

    Патч, о котором идет речь,

      sitedirs.append(os.path.join(prefix, "Lib", "site-packages")) elif os.sep == '/': + sitedirs.append(os.path.join(prefix, "local/lib", + "python" + sys.version[:3], + "dist-packages")) sitedirs.append(os.path.join(prefix, "lib", "python" + sys.version[:3], - "site-packages")) - sitedirs.append(os.path.join(prefix, "lib", "site-python")) + "dist-packages")) + sitedirs.append(os.path.join(prefix, "lib", "dist-python")) else: sitedirs.append(prefix) sitedirs.append(os.path.join(prefix, "lib", "site-packages")) 

    Таким образом, вы можете изменить site.path в системном пакете, чтобы создать модифицированный путь поиска модуля. Вы, вероятно, не хотите этого. Во-первых, вам придется объединить это в каждом обновлении пакета python вашего дистрибутива.

  2. Измените путь поиска модуля для всех пользователей (метод 2)

    Добавьте файл формы something.pth в каталог, который уже находится в пути поиска, который содержит путь, относительный или абсолютный. Например.

     /usr/local/lib/python2.6/dist-packages$ cat foo.pth /home/faheem/dummypythonpath 

    В другом терминале

     >>> import sys >>> sys.path [...,'/home/faheem/dummypythonpath',...,] 
  3. Измените путь поиска модуля для всех пользователей (метод 3)

    Переменная окружения PYTHONPATH обычно используется для добавления к системному пути на уровне пользователя. Вы можете поместить его в файл, который будет использоваться всеми пользователями. Например. в Debian у нас есть /etc/bash.bashrc, который говорит вверху

     # System-wide .bashrc file for interactive bash(1) shells. # To enable the settings / commands in this file for login shells as well, # this file has to be sourced in /etc/profile. 

    Таким образом, вы можете добавить или PYTHONPATH. Вероятно, вы хотите, чтобы он был использован как для входа, так и для интерактивных оболочек, поэтому вам нужно будет это проверить. К сожалению, дистрибутивы часто раздуты относительно возможности этого.

    Пути в PYTHONPATH добавляются в список путей поиска по умолчанию в системе (который может быть получен, например, sys.path – см. Ниже). Если учесть, что PYTHONPATH уже установлен, просто добавьте к нему дополнительные дополнительные каталоги, например.

     export PYTHONPATH=$PYTHONPATH:"/home/username/lib/python2.6/dist-packages" 

    Если вы выберете переменную PYTHONPATH, а затем снова проверьте sys.path, вы
    см. пути добавлены. Обратите внимание, что позиция, в которой пути в
    PYTHONPATH добавляются к ранее существовавшим путям, как представляется, не предписывается
    реализация.

  4. Измените путь поиска модуля на пользователя.

    Обычный способ – изменить PYTHONPATH в bashrc пользователя, а именно ~/.bashrc . Опять же, убедитесь, что он получен как для входа, так и для интерактивных оболочек.

  5. Измените путь поиска модуля на основе каждого сценария. Это делается путем добавления к sys.path, а именно

     import sys sys.path.append(some_additional_path) 

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

См. Также Грег Уорд об изменении пути поиска Python . Это хорошо обсуждает доступные альтернативы.

Используйте sys.path :

 import sys sys.path.append("/home/me/mypy") 

Вы также можете проверить документацию модуля site , в которой объясняется, как вычисляются пути к конкретным сайтам.