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

Запускать интерпретатор командной строки python с автоматическим загрузкой импорта

Я хотел бы поиграть в интерпретаторе python, но с кучей импорта и настройки объектов. Сейчас я запускаю интерпретатор в командной строке и каждый раз выполняю настройку. Есть ли способ запустить интерпретатор командной строки со всей выполненной инициализацией?

Пример:

# Done automatically.
import foo
import baz
l = [1,2,3,4]
# Launch the interpreter.
launch_interpreter()
>> print l
>> [1,2,3,4]
4b9b3361

Ответ 1

Вы можете создать script с кодом, который вы хотите запустить автоматически, затем используйте python -i, чтобы запустить его. Например, создайте script (позвоните ему script.py) с помощью этого:

import foo
import baz
l = [1,2,3,4]

Затем запустите script

$ python -i script.py
>>> print l
[1, 2, 3, 4]

После завершения выполнения script, python оставит вас в интерактивном сеансе с результатами script.

Если вы действительно хотите, чтобы некоторые вещи выполнялись каждый раз при запуске python, вы можете установить переменную окружения PYTHONSTARTUP в script, которая будет запускаться каждый раз при запуске python. См. Документацию в интерактивном файле запуска.

Ответ 2

Я столкнулся с этим вопросом при попытке настроить новый desk для моих исследований и обнаружил, что ответы выше не совсем подходят мое желание: содержать всю конфигурацию рабочего стола в одном файле (это означает, что я бы не создал отдельный script.py, как это было предложено @srgerg).

Вот как я достиг своей цели:

export PYTHONPATH=$READ_GEN_PATH:$PYTHONPATH

alias prepy="python3 -i -c \"
from naive_short_read_gen import ReadGen
from neblue import neblue\""

В этом случае neblue находится в CWD (поэтому там не требуется расширение пути), тогда как naive_short_read_gen находится в произвольном каталоге в моей системе, который указан через $READ_GEN_PATH.

Вы можете сделать это в одной строке, если необходимо: alias prepy=PYTHONPATH=$EXTRA_PATH:$PYTHONPATH python3 -i -c ....

Ответ 4

Вы можете использовать опцию -s во время запуска командной строки. Подробности приведены в документации здесь

Ответ 5

Я думаю, что знаю, что ты хочешь сделать. Возможно, вы захотите проверить IPython, потому что вы не можете запустить интерпретатор python, не указав параметр -i (по крайней мере, не напрямую). Это то, что я сделал в своем проекте:

def ipShell():
    '''Starts the interactive IPython shell'''
    import IPython
    from IPython.config.loader import Config
    cfg = Config()
    cfg.TerminalInteractiveShell.confirm_exit = False
    IPython.embed(config=cfg, display_banner=False)
# Then add the following line to start the shell
ipShell()

Вам нужно быть осторожным, потому что оболочка будет иметь пространство имен модуля, определяемое функцией ipShell(). Если вы поместите определение в файл, который вы запустили, вы сможете получить доступ к globals(), который вы хотите. Там может быть и другие обходными путями, чтобы впрыснуть имена вы хотите, но вы должны дать Аргументы функции в этом случае.

ИЗМЕНИТЬ

Следующая функция по умолчанию использует пространство имен вызывающего абонента (__main__.__dict__).

def ipShell():
    '''Starts the interactive IPython shell
    with the namespace __main__.__dict__'''
    import IPython
    from __main__ import __dict__ as ns
    from IPython.config.loader import Config
    cfg = Config()
    cfg.TerminalInteractiveShell.confirm_exit = False
    IPython.embed(config=cfg, user_ns=ns, display_banner=False)

без дополнительных аргументов.