Описание процесса установки и запуска Jupyter Notebook, а так же сохранение блокнота в git.
Установка в Windows 7
Если использовать jupyter/base-notebook в качестве базового контейнера, это приведет к возникновению ошибке:
File "/opt/conda/lib/python3.11/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 304, in _prepare_distribution return preparer.prepare_linked_requirement(self._ireq, parallel_builds=True) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/conda/lib/python3.11/site-packages/pip/_internal/operations/prepare.py", line 532, in prepare_linked_requirement metadata_dist = self._fetch_metadata_only(req) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/conda/lib/python3.11/site-packages/pip/_internal/operations/prepare.py", line 383, in _fetch_metadata_only return self._fetch_metadata_using_link_data_attr( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/conda/lib/python3.11/site-packages/pip/_internal/operations/prepare.py", line 403, in _fetch_metadata_using_link_data_attr metadata_file = get_http_url( ^^^^^^^^^^^^^ File "/opt/conda/lib/python3.11/site-packages/pip/_internal/operations/prepare.py", line 107, in get_http_url from_path, content_type = download(link, temp_dir.path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/conda/lib/python3.11/site-packages/pip/_internal/network/download.py", line 147, in __call__ for chunk in chunks: File "/opt/conda/lib/python3.11/site-packages/pip/_internal/cli/progress_bars.py", line 52, in _rich_progress_bar with progress: File "/opt/conda/lib/python3.11/site-packages/pip/_vendor/rich/progress.py", line 1169, in __enter__ self.start() File "/opt/conda/lib/python3.11/site-packages/pip/_vendor/rich/progress.py", line 1160, in start self.live.start(refresh=True) File "/opt/conda/lib/python3.11/site-packages/pip/_vendor/rich/live.py", line 132, in start self._refresh_thread.start() File "/opt/conda/lib/python3.11/threading.py", line 957, in start _start_new_thread(self._bootstrap, ()) RuntimeError: can't start new thread
Проблема заключается в использовании устаревшей версии docker (проверить версию можно набрав: docker version). Для решения проблемы нужно:
- установить более свежую версию docker (может не работать на устаревающих ОС)
- найти контейнер, который будет правильно работать в текущей версии docker (далее будет использоваться версия jupyter/base-notebook:12ba1d59fbc3)
- Создать Docker файл, и добавить в него:
FROM jupyter/base-notebook:12ba1d59fbc3 RUN pip install pandas numpy xlsxwriter xlrd openpyxl matplotlib requests jupytext
Дополнительно будут установлены необходимые библиотеки для анализа, преобразования, отображения данных, а также библиотеки для запроса данных с сторонних ресурсов.
- Создать docker-compose со следующим содержимым:
version: "3" services: python-server: build: ./python ports: - "8888:8888" volumes: - /PATH_TO_YOU_CODE_FOLDER_FROM_SHARE_DIR://home/jovyan/work
- Выполнить:
docker-compose build docker-compose up -d docker ps
В результате будет собран и запущен контейнер, а последняя команда отобразит все запущенные в системе контейнеры с их идентификаторами
- Определить идентификатор контейнера python-server и просмотреть логи сервера, выполнив:
docker logs YOU_CONTAINER_ID
Найти в выводе строку похожую на:
http://localhost:8888/?token=112bb073331f1460b73768c76dffb2f87ac1d4ca7870d46a
- Скопировать параметры строки (то что идет после 8888/)
- Определить адрес, по которому доступен контейнер:
docker-machine ip
- Набрать в браузере:
IP:8888
В результате откроется страниц вида:
- Дополнить строку в браузере параметрами, скопированными на шаге 5, чтобы получилась строка вида:
IP:8888/?token=112bb073331f1460b73768c76dffb2f87ac1d4ca7870d46a
В результате будет осуществлен вход в Jupyter Notebook и можно будет создавать свои блокноты:
Сохранение проекта в git
Jupyter notebooks сохраняет файлы .ipynb в JSON формате, в результате чего все графические изображения будут преобразованы в строки, это затруднит просмотр реальных изменений. Для обхода этого ограничения «блокнот» будет сохранен в двух форматах .ipynb и .Rmd (r-markdown формат — текстовый файл, без результатов вывода)
- Отредактировать Docker файл, добавив в него установку jupytext (если нету):
RUN pip install jupytext
- Добавить volume в docker-compose, ссылающийся на //home/jovyan/.jupyter:
- /PATH_TO_YOU_CONFIG_FOLDER_FROM_SHARE_DIR://home/jovyan/.jupyter
- Войти в Docker контейнер:
docker exec -i -t YOU_CONTAINER_ID bash
- Выполнить:
jupyter notebook --generate-config
Будет создан файл конфигурации .jupyter/jupyter_notebook_config.py (если он еще не существует, иначе возникнет предложение переписать его)
- Отредактировать файл конфигурации, добавив в него:
c.ContentsManager.default_jupytext_formats = ".ipynb,.Rmd"
Дополнительно может потребоваться прописать в конфигурацию:
c.NotebookApp.contents_manager_class="jupytext.TextFileContentsManager"
- Перезапустить контейнер
- Теперь можно добавлять в git .Rmd файлы, а файлы .ipynb добавить в список игнорирования