Введение
Если мы хотим запустить Python, обычно есть два способа: первый способ — запустить в интерактивном режиме в среде интерпретатора Python или IPython, а второй — написать файлы .py, которые больше всего нравятся программистам, в файл Write python code , затем бегите.
Если мы хотим написать статью о Python, в статье есть код, и мы хотим, чтобы код выполнялся на текущей странице, можем ли мы это сделать?
Да, это использование Jupyter Notebook, которое мы собираемся представить сегодня.
Jupyter Notebook
Проект Jupyter был ответвлен от проекта Ipython, и до Ipython3.x они были выпущены вместе. После Ipython4.x Jupyter разрабатывался и управлялся как отдельный проект. Поскольку Jupyter может выполнять не только программы Python, но и другие языки программирования процессов.
Jupyter Notebook состоит из трех частей. Первая часть представляет собой веб-приложение, предоставляющее интерактивный интерфейс, в котором можно запустить соответствующий код.
Вышеприведенное изображение представляет собой интерактивный интерфейс NoteBook, мы можем редактировать, запускать и выполнять другие операции с документом.
Основные функции следующие:
-
Редактирование кода в браузере, автоматическая подсветка синтаксиса, отступы и возможности автодополнения/самоанализа табуляции.
-
Возможность выполнения кода из браузера и добавления результатов вычислений к коду, который их сгенерировал.
-
Отображение результатов расчета с использованием мультимедийных представлений, таких как HTML, LaTeX, PNG, SVG и т. д. Например, показатели качества публикации, отображаемые библиотекой matplotlib, могут быть встроены.
-
Редактирование форматированного текста в браузере с использованием языка разметки Markdown (который может предоставлять комментарии к коду) не ограничивается простым текстом.
-
Возможность легко включать математические символы в ячейки уценки с помощью LaTeX и изначально отображать MathJax.
Вторая часть — это документ NoteBook, в котором хранится код для запуска и некоторая описательная информация. Как правило, этот документ хранится с расширением .ipynb.
Документы записной книжки хранятся в формате json и кодируются с помощью base64. Преимущество использования json в том, что данные можно легко обменивать между разными серверами.
В дополнение к исполняемым файлам кода документы Notebook также могут хранить пояснительный контент, например инструкции, так что код и пояснительный контент идеально сочетаются, что особенно подходит для создания учебных заметок.
Записные книжки можно экспортировать в различные статические форматы с помощью команды nbconvert, включая HTML, reStructuredText, LaTeX, PDF и другие.
Кроме того, документами можно легко обмениваться в сети.
Третья часть — это ядро кода, работающегоKernels, через разныеKernelsВ сочетании ноутбуки могут поддерживать запуск различных программ. Например: Python, java, go, R, ruby, nodejs и т. д.
Эти ядра и блокноты взаимодействуют через MQ в форме Json.
запустить сервер ноутбуков
После того, как у нас есть документ, если мы хотим запустить документ, нам нужно запустить сервер ноутбука.
jupyter notebook
Следующие URL-адреса включены по умолчанию:http://127.0.0.1:8888
Вы также можете указать файл .ipynb, который будет открываться при запуске:
jupyter notebook my_notebook.ipynb
Работа с интерфейсом конкретного ноутбука здесь не будет описана, и в основном она аналогична обычному компилятору. Вы можете исследовать самостоятельно.
Структура документа записной книжки
Записная книжка содержит несколько ячеек, и каждая ячейка содержит многострочное поле ввода текста, которое может быть выполнено с помощью Shift-Enter или кнопки воспроизведения на панели инструментов.
Здесь есть три типа ячеек, а именно ячейки кода, ячейки уценки и необработанные ячейки.
code cells
Ячейки кода позволяют редактировать и писать новый код с полным синтаксисом и подсветкой вкладок. Используемый вами язык программирования зависит от ядра, ядро по умолчанию (IPython) запускает код Python.
Когда ячейка кода выполняется, содержащийся в ней код отправляется в ядро, связанное с блокнотом. Результат, возвращенный из этого расчета, будет отображаться в записной книжке как вывод ячейки. Вывод не ограничивается текстом, есть много других возможных форм вывода, включая рисунки matplotlib и HTML-таблицы (например, таблицы, используемые в пакете анализа данных pandas).
Давайте посмотрим на пример ячеек кода:
#%%
import numpy as np
my_arr = np.arange(1000000)
my_list = list(range(1000000))
Каждая ячейка#%%
быть отделенным.
Сам Ipython также поддерживает различные форматы отображения расширенного текста, включая HTML, JSON, PNG, JPEG, SVG, LaTeX и т. д.
Ipython предоставляет метод отображения, мы можем использовать display для отображения объекта, который нужно отобразить:
from IPython.display import display
display(obj)
Будут перебраны все возможные типы отображения для данного объекта, и для отображения будет выбран один из наиболее подходящих типов, а результат будет сохранен в документе Блокнота.
Если вы хотите отобразить определенный тип объекта, вы можете сделать это:
from IPython.display import (
display_pretty, display_html, display_jpeg,
display_png, display_json, display_latex, display_svg
)
Вот пример, показывающий картинку:
from IPython.display import Image
i = Image(filename='../images/ipython_logo.png')
i
display(i)
В приведенном выше примере я содержит объект изображения, который можно отобразить, вызвав i напрямую.Мы также можем отобразить вызовdisplay(i)
.
Другие типы форматированного текста могут ссылаться на изображение, и методы использования аналогичны.
markdown cells
Markdown — это начальный язык разметки, который очень прост в использовании и имеет широкий спектр применения, поэтому документы записной книжки также поддерживают синтаксис разметки.
Давайте посмотрим на пример ячейки уценки:
#%% md
```python
$ python
Python 3.6.0 | packaged by conda-forge | (default, Jan 13 2017, 23:17:12)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 5
>>> print(a)
5
```
Синтаксис уценки доступен в блокнотах.
Также поддерживается стандартный синтаксис LaTeX и AMS-LaTeX.
raw cells
Необработанные ячейки обеспечивают место, где выходные данные могут быть записаны напрямую. Записная книжка не выполняет расчеты содержимого исходных ячеек.
Импорт Jupyter Notebooks в виде модулей
Иногда мы хотим импортировать Jupyter Notebooks в виде модулей, но, к сожалению, Jupyter Notebooks не является стандартной программой Python, но Python предоставляет некоторые программы-ловушки, которые позволяют нам легко импортировать.
Во-первых, нам нужно импортировать некоторые базовые API:
import io, os, sys, types
from IPython import get_ipython
from nbformat import read
from IPython.core.interactiveshell import InteractiveShell
Далее вам нужно зарегистрировать NotebookFinder в sys.meta_path:
sys.meta_path.append(NotebookFinder())
Этот NotebookFinder является определенным хуком.
Давайте посмотрим на определение NotebookFinder:
class NotebookFinder(object):
"""Module finder that locates Jupyter Notebooks"""
def __init__(self):
self.loaders = {}
def find_module(self, fullname, path=None):
nb_path = find_notebook(fullname, path)
if not nb_path:
return
key = path
if path:
# lists aren't hashable
key = os.path.sep.join(path)
if key not in self.loaders:
self.loaders[key] = NotebookLoader(path)
return self.loaders[key]
В нем используются два важных метода: find_notebook используется для поиска блокнота, а NotebookLoader используется для загрузки блокнота.
Взгляните на определение find_notebook:
def find_notebook(fullname, path=None):
"""find a notebook, given its fully qualified name and an optional path
This turns "foo.bar" into "foo/bar.ipynb"
and tries turning "Foo_Bar" into "Foo Bar" if Foo_Bar
does not exist.
"""
name = fullname.rsplit('.', 1)[-1]
if not path:
path = ['']
for d in path:
nb_path = os.path.join(d, name + ".ipynb")
if os.path.isfile(nb_path):
return nb_path
# let import Notebook_Name find "Notebook Name.ipynb"
nb_path = nb_path.replace("_", " ")
if os.path.isfile(nb_path):
return nb_path
Посмотрите на определение NotebookLoader:
class NotebookLoader(object):
"""Module Loader for Jupyter Notebooks"""
def __init__(self, path=None):
self.shell = InteractiveShell.instance()
self.path = path
def load_module(self, fullname):
"""import a notebook as a module"""
path = find_notebook(fullname, self.path)
print ("importing Jupyter notebook from %s" % path)
# load the notebook object
with io.open(path, 'r', encoding='utf-8') as f:
nb = read(f, 4)
# create the module and add it to sys.modules
# if name in sys.modules:
# return sys.modules[name]
mod = types.ModuleType(fullname)
mod.__file__ = path
mod.__loader__ = self
mod.__dict__['get_ipython'] = get_ipython
sys.modules[fullname] = mod
# extra work to ensure that magics that would affect the user_ns
# actually affect the notebook module's ns
save_user_ns = self.shell.user_ns
self.shell.user_ns = mod.__dict__
try:
for cell in nb.cells:
if cell.cell_type == 'code':
# transform the input to executable Python
code = self.shell.input_transformer_manager.transform_cell(cell.source)
# run the code in themodule
exec(code, mod.__dict__)
finally:
self.shell.user_ns = save_user_ns
return mod
С ними мы можем напрямую импортировать собственные блокноты.
Эта статья была включена вwoohoo.floydpress.com/12-fear-intel-…
Самая популярная интерпретация, самая глубокая галантерея, самые краткие уроки и множество трюков, о которых вы не знаете, ждут вас!
Добро пожаловать, чтобы обратить внимание на мой официальный аккаунт: «Программируйте эти вещи», разбирайтесь в технологиях, лучше поймите себя!