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

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

2 Solutions collect form web for “Настройка Python для включения другого каталога при поиске пакетов”

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

Во-первых, вопрос и комментарий. Я не использую 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 , в которой объясняется, как вычисляются пути к конкретным сайтам.

  • Не удалось экспортировать FUSE через NFS
  • Восстановление данных в поврежденном каталоге в файловой системе ext3
  • ImportError при запуске приложения WSGI в Apache: undefined symbol: PyUnicodeUCS2_DecodeUTF8
  • Отключить гашение экрана на текстовой консоли
  • xterm не найден абсолютный путь для оболочки
  • Окно сообщения GUI в SLES 11
  • Есть ли разница в стабильности между дистрибутивами Linux?
  • Как установить mplayer с терминала?
  • Проблемы с NTP - sntp: слишком много плохих или потерянных пакетов
  • Какая версия openSUSE ближе всего к SLES11SP1
  • Разрешения, измененные на / dev / nvidia *, когда GPU получил доступ как root на SUSE
  • Interesting Posts

    Разрешить пользователю использовать команды brclt-like без sudo

    Провайдер nVidia

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

    Получение первых n символов из файла

    Как сохранить исходное расширение после нескольких манипуляций с файлами

    резервное копирование: какие исправления для резервного копирования перед обновлением / переустановкой

    Не удается создать корневую тюрьму

    Двойная загрузка с Windows 7 и Fedora 20

    Как скопировать весь текст файла редактора nano в буфер обмена Windows?

    как вы находите все файлы и каталоги без липкого бита?

    Подберите patternA и напечатайте его только тогда, когда сопоставляется patternB, включая следующую строку

    Как я могу заставить Bash отображать определения автозаполнения для данной команды?

    awk для консолидации большого табличного файла?

    Петля, чтобы проверить, установлен ли пакет Debian или нет.

    ошибка разрешения файла bash при добавлении к файлу

    Linux и Unix - лучшая ОС в мире.