Кожного разу, коли я запускаю IPython Notebook, першою командою, яку я запускаю, є
%matplotlib inline
Чи є спосіб змінити конфігураційний файл так, щоб при запуску IPython він автоматично переходив у цей режим?
Кожного разу, коли я запускаю IPython Notebook, першою командою, яку я запускаю, є
%matplotlib inline
Чи є спосіб змінити конфігураційний файл так, щоб при запуску IPython він автоматично переходив у цей режим?
ipython --matplotlib
краще
Відповіді:
IPython має профілі для налаштування, розташовані за адресою ~/.ipython/profile_*
. Викликається профіль за замовчуванням profile_default
. У цій папці є два основних файли конфігурації:
ipython_config.py
ipython_kernel_config.py
Додайте вбудований параметр для matplotlib до ipython_kernel_config.py
:
c = get_config()
# ... Any other configurables you want to set
c.InteractiveShellApp.matplotlib = "inline"
Використання %pylab
для отримання вбудованого побудови графіку не рекомендується .
Він вводить у ваш простір імен всілякі гармати, які вам просто не потрібні.
%matplotlib
з іншого боку, дозволяє вбудований графік, не вводячи ваш простір імен. Вам потрібно буде зробити явні дзвінки, щоб імпортувати matplotlib та numpy.
import matplotlib.pyplot as plt
import numpy as np
Невелика ціна явного введення імпорту повинна бути повністю подолана тим фактом, що тепер у вас є відтворюваний код.
%matplotlib
виклику вручну, чи він обидва встановив бэкэнд за замовчуванням і автоматично налаштував для використання негайно в середовище iPython.
matplotlib
vs pylab
, iPython дозволяє дуже легко автоматично виконувати довільний код python кожного разу, коли ви запускаєте програму Profiles. Я вважаю, що досить часто можна мати профіль, де ви автоматично робите загальні імпорти, наприклад import numpy as np; import pandas as pd; import matplotlib.pyplot as plt
тощо. Примітка: pylab
це не те саме, що pyplot
. Напевно, мені знадобився місяць, щоб усвідомити це.
ipython_kernel_config.py
, який містить цю опцію. Створіть новий профіль ( ipython profile create test
), щоб отримати за замовчуванням.
c.InteractiveShellApp.matplotlib = "inline"
Я думаю, що ви хочете запустити наступне з командного рядка:
ipython notebook --matplotlib=inline
Якщо вам не подобається щоразу вводити його на рядку cmd, ви можете створити псевдонім, який зробить це за вас.
--matplotlib inline
та видаліть --pylab. Дивіться цю публікацію розробника ipython чому: carreau.github.io/posts/10-No-PyLab-Thanks.ipynb.html
matplotlib=inline
: Це сповільнить роботу кожного ядра, яке ви запускаєте, незалежно від того, чи хочете ви використовувати matplotlib.
--matplotlib
або --pylab
ігноруються.
%pylab
або %matplotlib
замість цього.
Налаштування було вимкнено в Jupyter 5.X
і вище, додавши нижче код
pylab = Unicode('disabled', config=True,
help=_("""
DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib.
""")
)
@observe('pylab')
def _update_pylab(self, change):
"""when --pylab is specified, display a warning and exit"""
if change['new'] != 'warn':
backend = ' %s' % change['new']
else:
backend = ''
self.log.error(_("Support for specifying --pylab on the command line has been removed."))
self.log.error(
_("Please use `%pylab{0}` or `%matplotlib{0}` in the notebook itself.").format(backend)
)
self.exit(1)
А в попередніх версіях це в основному було попередженням. Але це не велика проблема, оскільки Jupyter використовує концепції, kernels
і ви можете знайти ядро для свого проекту, запустивши команду нижче
$ jupyter kernelspec list
Available kernels:
python3 /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3
Це дає мені шлях до папки ядра. Тепер, якщо я відкриваю /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3/kernel.json
файл, я бачу щось на зразок нижче
{
"argv": [
"python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}",
],
"display_name": "Python 3",
"language": "python"
}
Тож ви можете побачити, яка команда виконується для запуску ядра. Отже, якщо ви запустите наведену нижче команду
$ python -m ipykernel_launcher --help
IPython: an enhanced interactive Python shell.
Subcommands
-----------
Subcommands are launched as `ipython-kernel cmd [args]`. For information on
using subcommand 'cmd', do: `ipython-kernel cmd -h`.
install
Install the IPython kernel
Options
-------
Arguments that take values are actually convenience aliases to full
Configurables, whose aliases are listed on the help line. For more information
on full configurables, see '--help-all'.
....
--pylab=<CaselessStrEnum> (InteractiveShellApp.pylab)
Default: None
Choices: ['auto', 'agg', 'gtk', 'gtk3', 'inline', 'ipympl', 'nbagg', 'notebook', 'osx', 'pdf', 'ps', 'qt', 'qt4', 'qt5', 'svg', 'tk', 'widget', 'wx']
Pre-load matplotlib and numpy for interactive use, selecting a particular
matplotlib backend and loop integration.
--matplotlib=<CaselessStrEnum> (InteractiveShellApp.matplotlib)
Default: None
Choices: ['auto', 'agg', 'gtk', 'gtk3', 'inline', 'ipympl', 'nbagg', 'notebook', 'osx', 'pdf', 'ps', 'qt', 'qt4', 'qt5', 'svg', 'tk', 'widget', 'wx']
Configure matplotlib for interactive use with the default matplotlib
backend.
...
To see all available configurables, use `--help-all`
Отже, якщо ми оновимо наш kernel.json
файл до
{
"argv": [
"python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}",
"--pylab",
"inline"
],
"display_name": "Python 3",
"language": "python"
}
І якщо я запускаю jupyter notebook
графіки, вони автоматичноinline
Зверніть увагу, що наведений нижче підхід також все ще працює, коли ви створюєте файл на шляху нижче
~ / .ipython / profile_default / ipython_kernel_config.py
c = get_config()
c.IPKernelApp.matplotlib = 'inline'
Але недоліком цього підходу є те, що це глобальний вплив на кожне середовище за допомогою python. Ви можете розглядати це як перевагу також, якщо ви хочете мати спільну поведінку в усіх середовищах з однією зміною.
Тож вибирайте, який підхід ви хотіли б використовувати, виходячи з ваших потреб
У вашому ipython_config.py
файлі знайдіть такі рядки
# c.InteractiveShellApp.matplotlib = None
і
# c.InteractiveShellApp.pylab = None
і коментувати їх. Потім перейдіть None
до бекенду, який ви використовуєте (я використовую 'qt4'
), і збережіть файл. Перезапустіть IPython, і matplotlib та pylab повинні бути завантажені - ви можете використовувати dir()
команду, щоб перевірити, які модулі знаходяться у глобальному просторі імен.
Далі до @Kyle Kelley та @DGrady, ось запис, який можна знайти в
$HOME/.ipython/profile_default/ipython_kernel_config.py
(або будь-який профіль, який ви створили)
Зміна
# Configure matplotlib for interactive use with the default matplotlib backend.
# c.IPKernelApp.matplotlib = none
до
# Configure matplotlib for interactive use with the default matplotlib backend.
c.IPKernelApp.matplotlib = 'inline'
Потім це буде працювати як в ipython qtconsole, так і в сесіях ноутбуків.