Як глобально змінити стандартний PYTHONPATH (sys.path)?


33

У системі 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.

Чи є один конфігураційний файл, який містить записи вище? Або якими способами це можливо змінити?

Відповіді:


27

Документація щодо модуля сайту та змінення Шляху пошуку 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()?


1
дякую, прекрасно працює :) (Я закінчив додавати .pth файл у /usr/local/python2.6/dist-packages, що містить "../site-packages")
Latanius

1
Ви також можете створити модуль, sitecustomize.pyякий називається, який site.pyнамагається там імпортувати та змінювати sys.path.
TestUser16418

5

Ви можете створити новий файл, який називається /etc/profile.d/local_python.shвмістом

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

Що дозволить встановити PYTHONPATHзмінну для всіх зареєстрованих користувачів у вашій системі.


7
Це насправді не є універсальним. Механізм /etc/profile.d буде працювати лише для оболонок для входу для людей із оболонками, які використовують /etc/profile.d (bash / ksh / zsh). Я впевнений, що користувачі csh не побачать цієї зміни. Крім того, буде проігноровано в cron / на робочих місцях.
Багата Гомолка

2
це хороший спосіб встановити глобальні змінні середовища (ще одна річ, яку я дізнався сьогодні), але, як я вже згадував у публікації, я шукав ще пітонічний шлях :)
Latanius

4

Я хотів би підсумувати свої висновки щодо модифікації шляху пітона. Є два способи зробити це.

  • .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.


2
Це PYTHONPATH без "_"
heroxbd

1

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

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

sys.path.append(egg_path)

import suds
# ... rest of code
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.