30

В системе Ubuntu (10.10) у меня есть пакет Python, который устанавливается в /usr/local/lib/python2.6/site-packages/ . Это не содержится в пути по умолчанию (sys.path). Как добавить этот каталог в путь?

Конечно, установка переменной окружения $PYTHONPATH - это решение, но я ищу более элегантный способ сделать это. Например, easy_install также помещает в него установленные пакеты, мой sys.path выглядит примерно так:

['', '/usr/local/lib/python2.6/dist-packages/keyring-0.5.1-py2.6.egg', 
'/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk',  
'/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', 
'/usr/local/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages', 
'/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/pymodules/python2.6', 
'/usr/lib/pymodules/python2.6/gtk-2.0']

таким образом, путь явно не по умолчанию встроен в двоичный файл Python.

Есть ли один файл конфигурации, который содержит записи выше? Или каким образом это можно изменить?

4 ответа4

26

Документация по модулю сайта и изменение пути поиска Python, похоже, то, что вы ищете.

Насколько я понимаю, эти записи добавляются в sys.path :

  • /usr/lib/python2.6/site.py
  • /usr/lib/python2.6/dist-packages/site.py
    (Измените 2.6 на вашу версию Python.)

Самый простой способ изменить это - добавить файл /usr/local/lib/python2.6/dist-packages/site-packages.pth содержащий ../site-packages .

Или, может быть, вы можете научить пакет использовать site.getsitepackages()?

5

Вы можете создать новый файл /etc/profile.d/local_python.sh с содержимым

PYTHONPATH="/usr/local/lib/python2.6/site-packages/":"${PYTHONPATH}"
export PYTHONPATH

Который установит переменную PYTHONPATH для всех зарегистрированных пользователей вашей системы.

4

Я хотел бы обобщить мои выводы о модификации пути в Python. Есть два способа сделать это.

  • .pth файл
  • PYTHONPATH

Любой файл .pth, который находится по пути по умолчанию (см. Ниже), получает свое содержимое, включенное в sys.path . Формат указанного .pth файла прост: один (папка) путь на строку. Удивительно, но пути могут быть абсолютными или относительными к .pth файлу.

Путь по умолчанию - это место, где находится интерпретатор, и <some-prefix>/lib/python<version>/site-packages где <some-prefix> обычно это /usr/ .

PYTHONPATH - это переменная окружения вашей операционной системы. В системах Unix вы перечисляете их по env . Глобальная модификация таких переменных выполняется с помощью скриптов .sh в папке /etc/profile.d/ как упоминалось @ TestUser16418.

1

Например, если вы хотите импортировать модуль suds , которая доступна в виде файла .egg

egg_path = '/home/shahid/suds_2.4.egg'

sys.path.append(egg_path)

import suds
# ... rest of code

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .