Инициализировать интерпретатор с переменными

Как инициализировать интерпретатор python таким образом, чтобы в его памяти уже были переменные? Например, как я могу инициализировать интерпретатор [n i]Python и ввести в качестве первого ввода:

In [1]: today
Out[1]: '2015-05-05 17:49:32.726496'

без предварительной привязки имени str(today = datetime.datetime.today())?

4 ответа

Решение

Если вы используете ipython, вы можете настроить его для автоматической загрузки скриптов.

Бежать

$ ipython profile create

который создаст профиль по умолчанию в вашем домашнем каталоге.

Создайте файл с именем ~/.ipython/ipython_init.py и добавить

import datetime
today = datetime.datetime.today

Теперь в конце ~/.ipython/profile_default/ipython_config.py, добавьте эту строку, чтобы он загружал этот файл при каждом запуске интерпретатора

c.InteractiveShellApp.exec_files = ['~/.ipython/ipython_init.py']

В следующий раз, когда вы запустите оболочку ipython, вы сможете получить доступ к этим переменным.

In [1]: today
Out[1]: datetime.datetime(2017, 3, 2, 13, 31, 26, 776744)

Существует три варианта стандартного интерпретатора Python:

  • python -i setup.py как объяснили в ответе цамана
  • падение в интерактивный режим изнутри setup.py как объяснено в ответе Джордана П
  • установка переменной среды PYTHONSTARTUP=setup.py,

Последний вариант полезен, если вы хотите запускать и останавливать Python сотни раз. Просто export PYTHONSTARTUP=setup.py и пока вы находитесь в одной оболочке, он всегда будет загружаться setup.py, Или, если вы хотите, чтобы он был более постоянным, поместите его в свой профиль (или переменные среды панели управления Windows или что-то еще).

PYTHONSTARTUP особенно удобно с virtualenvwrapper И его post_activate крюк. Просто установите крюк export PYTHONSTARTUP=${VIRTUAL_ENV}/setup.py и вы можете иметь различные настройки для каждой среды.

На самом деле, что -i на самом деле это, по сути, переопределить PYTHONSTARTUP с одноразовым временным значением.


IPython имеет свою очень мощную (но несколько сложную) систему настройки и настройки. Вы можете создать дюжину различных профилей и редактировать каждый из них, чтобы включить или отключить использование -i а также PYTHONSTARTUP, менять PYTHONSTARTUP использовать другое имя переменной, выполнять разные строки кода при каждом запуске ядра и т. д. Большая часть того, что вы хотите, находится в настройках терминала IPython, если вы используете его в терминале.

В дополнение к другому ответу вы можете явно перейти в интерактивный режим, например:

// setup.py
import code, datetime
today = datetime.datetime.today()
code.interact(local=locals())

выполнить нормально

python setup.py

Вы можете создать скрипт, содержащий ваш "установочный" код, а затем выполнить его и войти в интерактивный режим.

Например:

# foo.py
import datetime
today = datetime.datetime.today

Бежать с:

python -i foo.py
>>> today
'2015-05-05 17:49:32.726496'

Я считаю, IPython должен поддерживать ту же опцию. Другая альтернатива для IPython - это просто запустить его, а затем сказать:

In [1]: %run foo.py

Который будет запускать этот скрипт в вашей текущей оболочке, предоставляя вам доступ ко всему, что там определено.

Другие вопросы по тегам