Intereting Posts
Asus USB N10 беспроводной адаптер работает на Ubuntu, но не Fedora Скажите сетевому менеджеру приостановить действие Что такое алгоритм, который использует команда `iw` для выбора точки доступа для данной сети Wi-Fi? Изменение имени хоста на SUSE Linux Enterprise Server 11 SP3 для VMware Туннелирование трафика IPv6 из SLIP в Linux Как показать текущее значение переменной среды? как настроить гостевые дополнения (драйверы) виртуальной коробки в системе systemd (exherbo) Как включить вкладку zsh / prezto? Блокировка веб-сайтов с помощью / etc / hosts Выполнение вставки вставки Vim для предложений Почему псевдоним внутри функции не работает? LVM: отражается ли это? скопировать это медленно? Получить последнее значение переменной среды – это сценарий оболочки bash Как получить завершение вкладки bash для работы с файловой системой только для чтения? Как я могу рассчитывать и форматировать длительность дат, используя инструменты GNU, а не дату результата?

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