Как обновить $ PATH - PullRequest
       30

Как обновить $ PATH

3 голосов
/ 16 сентября 2010

Я пишу приложение python / pygtk, которое добавляет некоторые пользовательские сценарии (bash) в определенную папку в $ HOME (например, ~/.custom_scripts).

Я хочу сделать эту папку доступной в $PATH. Таким образом, каждый раз, когда приложение python добавляет скрипт, этот скрипт может быть мгновенно доступен, когда пользователь открывает терминал (например, gnome-терминал).

Где вы предлагаете «внедрить» эту зависимость $ PATH? .bashrc, /etc/profile.d и т. Д.? С какими преимуществами / недостатками я могу столкнуться?

Например, если я добавлю сценарий для экспорта нового пути в /etc/profile.d, путь не будет обновляться до повторного входа в систему.

Спасибо

Ответы [ 7 ]

2 голосов
/ 16 сентября 2010

Для сценариев, которые находятся в каталоге $ HOME, вы обычно используете вместо этого папку $ HOME / bin, которая (обычно) находится в пути.

2 голосов
/ 16 сентября 2010

.profile будет разумным местом, если это установка для каждого пользователя; /etc/profile.d для общесистемных установок. (Конечно, для этого вам понадобится root.)

Ваш установщик не сможет изменить путь к текущей оболочке (если она не запущена через source, что было бы ... странно)

1 голос
/ 16 сентября 2010

Ты не должен. Пользователь выбирает, хочет ли он этого в PATH, в каких случаях и как этого добиться. Что вы можете сделать, это проинформировать пользователя о каталоге, в котором находятся ваши скрипты, и предложить поместить его в PATH.

Или, может быть, вы спрашиваете с точки зрения пользователя?

1 голос
/ 16 сентября 2010

~.посмотрите, был ли каталог уже добавлен, чтобы скрипт не добавил его более одного раза.

1 голос
/ 16 сентября 2010

Редактировать: я неправильно прочитал оригинальный вопрос, поэтому этот фрагмент полезен только для изменения PATH, но не для его сохранения ...

Все это можно сделать с помощью модуля os:

import os
USER_HOME = os.path.expanduser('~')
os.environ['PATH'] += ":" + os.path.join(USER_HOME, '.custom_scripts')

Это добавляет :~/.custom_scripts к концу $PATH, поскольку PATH всегда должно быть разделено двоеточием.

1 голос
/ 16 сентября 2010

/ etc / profile.d добавит его к каждому пути пользователяперечитайте файлы конфигурации.

0 голосов
/ 17 сентября 2010

Почему бы вам не установить соответствующий PATH при первом вызове вашего модуля (т.е. в __init__.py вашего модуля):

# this is your module's __init__.py
import sys
eggs = ['/path/to/egg/1.egg', '/path/to/egg/2.egg']
for egg in eggs:
    sys.path.append(egg)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...