Подтвердить что ты не робот

Эквивалент Python ~/.bashrc

Для тех, кто не знаком с ~/.bashrc, это настраиваемый script, который существует для оболочки Unix Bash. Когда начинается новый сеанс терминала, этот пользовательский файл запускается. Пользователи могут использовать script общие переменные, функции и параметры среды в этом файле и, таким образом, автоматически загружать их, когда они открывают окно терминала.

Существует ли что-то аналогичное для Python? По сути, я хотел бы определить несколько глобальных функций Python в script и убедиться, что они загружаются всякий раз, когда я запускаю Python script на моей машине или когда я запускаю терминал Python. Мне интересно, если это поведение уже существует, или если есть прямой способ его реализации.

4b9b3361

Ответ 1

Запуск для каждого Python script не является хорошей идеей, так как он нарушает пространство имен; per Zen of Python:

Пространства имен - одна хорошая идея - позвольте сделать больше!

Тем не менее, __init__.py может использоваться для обеспечения того, чтобы определенный код запускался, если импортирован пакет или его дочерние элементы, и для настройки интерактивного интерпретатора установите переменную среды PYTHONSTARTUP, чтобы указать на файл с командами Python, чтобы перед передачей интерактивному интерпретатору, например export PYTHONSTARTUP=$HOME/.pythonrc.

Просто убедитесь, что файл PYTHONSTARTUP содержит легальный синтаксис для Py2 и Py3, потому что нет PYTHON3STARTUP, он будет запущен для обеих версий Python.

Ответ 2

Это плохая идея - не делайте этого. В самом деле. (Загрязнение пространства имен является серьезной проблемой, и вы никому не помогаете, написав код, который работает только на ваших собственных машинах и нигде больше, наоборот, если вы упаковываете свой код в модуль, вы можете публиковать его и распространять его должным образом).

Однако, если вы настаиваете, см. модуль сайта и, в частности, его поведение пользовательской настройки:

После этого делается попытка импортировать модуль с именем usercustomize, который может выполнять произвольные пользовательские настройки, если ENABLE_USER_SITE - true. Этот файл предназначен для создания в каталоге пользовательских сайтов-пакетов (см. Ниже), который является частью sys.path, если не отключен с помощью -s. ImportError будет игнорироваться.

Таким образом, вы можете создать модуль usercustomize, который hotpatches к вашему сердечному содержимому.


В качестве примера такой hotpatching:

def myfunc():
  print 'hello'

main_ns = __import__('__main__')
main_ns.myfunc = myfunc

Ответ 3

По сути, я хотел бы определить несколько глобальных функций Python в script и убедиться, что они загружаются всякий раз, когда я запускаю python script на моем машина или всякий раз, когда я запускаю терминал Python

Расскажите о своем втором варианте. Существуют способы загрузки функций и переменных при запуске терминала. Я бы рекомендовал использовать IPython вместо стандартного терминала Python. Однако для этого без установки IPython измените переменную среды PYTHONSTARTUP. Вы теряете возможность разделить ваши файлы конфигурации.

После установки IPython вам необходимо инициализировать свои файлы конфигурации. Чтобы создать профиль по умолчанию:

ipython profile create 

Чтобы решить общую тему в других ответах, глобальные переменные и функции являются плохой идеей, особенно если они неявно определены. Однако при запуске ipython вы можете определять и загружать отдельные файлы конфигурации. Чтобы создать такой профиль:

ipython profile create <name>

Чтобы загрузить профиль <name>:

ipython --profile=<name>

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

ipython locate profile

Вы должны найти ipython_config.py. Я бы предложил прочитать его, у него есть очень полезные комментарии.

Но для достижения этой цели вы можете загружать произвольные функции и переменные при запуске ipython, добавляя эти строки в файл конфигурации:

c.InteractiveShellApp.exec_lines = [ "def p(s): print s" ]
c.InteractiveShellApp.exec_files = [ "/path/of/script.py" ] 

Я ссылаюсь на документы IPython и комментарии в ipython_config.py:

96  # List of files to run at IPython startup.                                      
97  # c.TerminalIPythonApp.exec_files = []                                          
98                                                                                 
99  # lines of code to run at IPython startup.                                      
100 # c.TerminalIPythonApp.exec_lines = []