# Подготовка MacOS к использованию ML

Читаю книгу "Глубокое обучение на Python" Шолле Ф. издательства [Питер](https://www.piter.com/product_by_id/107230209). Как любую книгу по компьютерным технологиям, практику нужно делать самостоятельно, пробуя и набивая шишки, чтобы в голове что-то осталось.

Книга новая, издание 2020 года, но попытался провести установку предлагаемого ПО в свою MacOS и столкнулся с тем, что львинная доля предлагаемых пакетов просто не установилась. Выпаала с ошибками. Пришлось сидеть и разбираться, что не так.

Далее предлагаю описание найденного решения, которое может являтся не совсем корректным. И возможно есть более "правильные" пути решения.

## Pyenv

В MacOS Big Sur по умолчанию используется версия Python 3.8.2.

Для того, чтобы иметь возможность переключаться между версиями проще всего использовать [pyenv](https://github.com/pyenv/pyenv). Установить просто:

```bash
brew update
brew install pyenv
```

После чего необходимо добавить в `.bashrc` вызов:

```bash
eval "$(pyenv init -)
```

Теперь можно устанавливать произвольные версии Python:

```bash
pyenv install -l
pyenv install 3.7.8
pyenv local 3.7.8
```

Первая команда выводит список доступных для установки версий, вторая команда производит установку версию 3.7.8, третья команда переключает на новую версию директорию проекта.

## pipenv

Зависимости это головная боль Python-разработчика. И их описание через requirements.txt не стабильно. То, что собирается сейчас совершенно не факт, что будет собираться уже завтра.

В известном [Guide to Python](https://docs.python-guide.org/dev/virtualenvs/) рекомендуется использовать для управления виртуальными окружениями и зависимостями pipenv.

Устанавливаем:

```bash
pip install --user pipenv
```

Теперь, после того, как переходим в директорию с будущим проектом, используем команду активации для указания использования определенной версии Python:

```bash
pipenv --python 3.7
```

И теперь можно проводить установку пакетов через вызов команды:

```bash
pipenv install keras
```

Создал простейший темплейт для инициализации базового набора для работы с ML: [ml-template](https://github.com/juev/ml-template), можно просто создайть на его основе новый репозиторий и затем в его рабочей копии, после установки версии python 3.7, использовать команду для установки пакетов:

```bash
pipenv install
```

Переключаемся в созданное окружение:

```bash
pipenv shell
```

После чего вызов python будет проводиться с использованием установленных пакетов. Либо, как вариант, можно явно вызывать pipenv:

```bash
pipenv run python main.py
```

## Проблемы

В описываемом окружении мне не удалось подружить используемые пакеты с jupyter. Во время установки jupyter возникает конфликт версии билиотеки importlib-metadata. По зависимостям приходит версия 3.1.1, а для jupyter требуется версия меньше 3.

Решения данной проблемы пока не нашел.

Кстати, пробовал использовать рекомендуемую всеми anaconda, но к своему удивлению, не смог провести установку keras. Как раз в связи с тем, что в системе используется версия 3.8.2 версия python. В то время как для keras требуется версия менее 3.8.

Но, надеюсь, что мне удалось в итоге решить проблему с использованием ML-пакетов в MacOS. Хотя бы немного.
