Автоматический импорт модулей при входе в интерпретатор python или ipython


120

Я набираю текст import numpy as npпочти каждый раз, когда запускаю интерпретатор Python. Как мне настроить интерпретатор python или ipython так, чтобы numpy импортировался автоматически?

Ответы:


71

Используйте переменную среды PYTHONSTARTUP . Из официальной документации:

Если это имя читаемого файла, команды Python в этом файле выполняются до отображения первого приглашения в интерактивном режиме. Файл выполняется в том же пространстве имен, в котором выполняются интерактивные команды, так что определенные или импортированные в нем объекты можно использовать без квалификации в интерактивном сеансе.

Итак, просто создайте сценарий python с оператором импорта и укажите на него переменную среды. Сказав это, помните, что «Явное всегда лучше, чем неявное», поэтому не полагайтесь на это поведение для производственных сценариев.

Для Ipython см. Этот учебник о том, как создать файл ipython_config.


@mklauber, спасибо, но принятое решение устарело. Тем не менее, это вдохновило меня на редактирование. @ OP: См. Мой отредактированный ответ
Дхара

3
@ user545424 на момент написания этой статьи (ipython 1.1.0) также поддерживает PYTHONSTARTUP.
pflaquerre

Настройка env PYTHONSTARTUP="~/.startup.py"не сработала для меня
Seanny123

Просто примечание export PYTHONSTARTUP=~/.python_shell_startup.pyдля установки переменной.
PallavBakshi

78

Для ipython есть два способа добиться этого. Оба связаны с каталогом конфигурации ipython, который находится в ~/.ipython.

  1. Создайте собственный профиль ipython.
  2. Или вы можете добавить файл запуска в ~/.ipython/profile_default/startup/

Для простоты я бы использовал вариант 2. Все, что вам нужно сделать, это поместить файл .pyили .ipyв ~/.ipython/profile_default/startupкаталог, и он будет автоматически выполнен. Таким образом, вы можете просто поместить его import numpy as npв простой файл, и у вас будет np в пространстве имен вашего приглашения ipython.

Вариант 2 фактически будет работать с настраиваемым профилем, но использование настраиваемого профиля позволит вам изменить требования к запуску и другую конфигурацию в зависимости от конкретного случая. Однако, если вы всегда хотелиnp должны быть доступны для вас , то непременно поместите его в каталог запуска.

Для получения дополнительной информации о настройке ipython. В документах есть гораздо более полное объяснение.


2
В Ubuntu 14.04 каталог на самом деле: ~/.config/ipython/profile_default/startup/а не~/.ipython/profile_default/startup/
Питер

1
К сожалению, вариант 2 выше не позволяет завершить табуляцию.
user1717828

21

Я использую файл ~ / .startup.py следующим образом:

# Ned's .startup.py file
print("(.startup.py)")
import datetime, os, pprint, re, sys, time
print("(imported datetime, os, pprint, re, sys, time)")

pp = pprint.pprint

Затем определите PYTHONSTARTUP = ~ / .startup.py, и Python будет использовать его при запуске оболочки.

Здесь есть операторы печати, поэтому, когда я запускаю оболочку, я получаю напоминание о том, что это действует, и что уже было импортировано. ppЯрлык действительно слишком удобно ...


У меня не сработало в Linux. Должен ли я сказать Python, чтобы он смотрел в мой домашний каталог или что-то в этом роде?
Seanny123,

упс: забыл важный шаг: я добавил его: определение PYTHONSTARTUP
Нед Батчелдер

Я никогда не знаю , когда в ~качестве замены для $HOMEработы или нет, но вместо этого относительного пути я должен был использовать абсолютный путь на MacOS, рыбы и Python3.
rien333

@ Нед Батчелдер, спасибо, это то, что я искал. побочный вопрос, я использую это в окнах, и ярлык pp не работает. Не могли бы вы посоветовать? >>> pp <function pprint at 0x0000020DAF90C8C8> >>> pp () Traceback (последний вызов последним): файл «<stdin>», строка 1, в <module> TypeError: pprint () отсутствует 1 обязательный позиционный аргумент: 'объект' >>>
Forever Learner

5

Хотя создание настраиваемого сценария запуска, как предлагает ravenac95, является лучшим общим ответом для большинства случаев, он не будет работать в тех случаях, когда вы хотите использовать файл . Если вы иногда работаете с Python 2.x, но хотите использовать современное разделение, есть только один способ сделать это. После создания профиля отредактируйте (для Ubuntu это находится в ) и добавьте что-то вроде следующего внизу:from __future__ import Xprofile_default~/.ipython/profile_default

c.InteractiveShellApp.exec_lines = [
    'from __future__ import division, print_function',
    'import numpy as np',
    'import matplotlib.pyplot as plt',
    ]

3

В качестве более простой альтернативы принятому ответу в Linux:

просто определите псевдоним, например, поместите alias pynp='python -i -c"import numpy as np"'в ваш файл ~ / .bash_aliases. Затем вы можете вызвать python + numpy с помощью pynp, и вы все равно можете использовать только python с python. Поведение скриптов Python остается неизменным.


PYTHONSTARTUPвызывается только в интерактивном режиме, поэтому поведение скриптов Python в любом случае остается неизменным. Также можно создать псевдоним со ссылкой на файл:alias pynp='PYTHONSTARTUP="~/.startup.py" python'
F.Raab

2

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

#!/bin/env python3
import numpy as np

затем запустите его с -iфлагом.

python -i import_numpy.py

Такой способ даст вам возможность выбирать только те модули, которые вам нужны для разных проектов.


1

Как упоминал ravenac95 в своем ответе , вы можете создать собственный профиль или изменить профиль по умолчанию. Этот ответ представляет собой быстрый обзор команд Linux, необходимых дляimport numpy as np автоматического выполнения.

Если вы хотите использовать настраиваемый профиль под названием numpy, запустите:

ipython profile create numpy
echo 'import numpy as np' >> $(ipython locate profile numpy)/startup/00_imports.py
ipython --profile=numpy

Или, если вы хотите изменить профиль по умолчанию, чтобы всегда импортировать numpy:

echo 'import numpy as np' >> $(ipython locate profile default)/startup/00_imports.py
ipython

Ознакомьтесь с руководством по настройке IPython, чтобы узнать больше о настройке профилей. Посмотрите, .ipython/profile_default/startup/READMEчтобы понять, как работает каталог автозагрузки.


1

Мой ipythonвызов по умолчанию

ipython --pylab --nosep --InteractiveShellApp.pylab_import_all=False

--pylabбыл ipythonвариантом в течение некоторого времени. Он импортирует numpyи (части) matplotlib. Я добавил --Inter...опцию, чтобы она не использовала *импорт, поскольку я предпочитаю использовать явныйnp.... .

Это может быть ярлык, псевдоним или скрипт.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.