Я наставник Udacity и помог многим студентам продвинуться вперед в их проекте GitHub.
Я рецензент проекта Выявление мошенничества из электронной почты Enron.Проект впервые был опубликован с использованием Python 2. Udacity заявила, что не будет обновляться для работы в Python 3.
Так в чем проблема?
Это доставляло неудобства студентам и рецензентам, но пока не нарушало договоренности.
Но так как macOS Big Surupdate, Python 2 не работает в anaconda. И поскольку Python 2 устарел, команда anaconda не будет его исправлять.
Решение
На самом деле решения этой проблемы нет. Python 2 — старое программное обеспечение, и никто не будет тратить время на то, чтобы заставить его работать в более новых операционных системах.
На моем компьютере уже установлен Big Sur, и я просматриваю материалы для проекта. Единственным вариантом, который у меня был, было обновить проект самостоятельно.
Если вам интересно, вы можете клонировать мой форк и использовать ветку python-3.8
Улучшение проекта
Помимо использования старой версии Python, этот проект не определяет среду.
Заставлять учащихся выяснять, какие библиотеки и версии устанавливать. Которая тратит время взад и вперед между рецензентами и студентами. Чтобы справиться с этим, я добавил файл среды anaconda.
Мы можем создать среду обычным для anaconda способом:
$ conda env create -f environments/python-3.8.yaml
Я уже использовал эту среду для успешной оценки ряда проектов.
Обновление нашего кода
Мы можем обновить большую часть нашего кода автоматически, используя инструмент 2to3. Этот инструмент уже установлен в вашей среде anaconda на базе Python 3.
2to3 имеет много вариантов, но в большинстве случаев мы можем использовать более простые версии, которые переопределяют наши собственные файлы:
$ 2to3 -w <python file>
Это устраняет различия в Python, но нам может потребоваться обновить код для работы с новыми версиями библиотек, такими как Scikit Learn.
Самые распространенные, с которыми я сталкивался:
- Файлы Pickle должны быть открыты в двоичном режиме для чтения или записи. Мы узнаем, есть ли у нас проблема, если получим сообщение об ошибке, подобное следующему:
Traceback (most recent call last): File "pod_id.py", line 23, in <module> data_dict = pickle.load(data_file) TypeError: a bytes-like object is required, not 'str'
- Scikit Learn переименовал некоторые модули, поэтому нам нужно будет изменить ссылки и импорт модуля
cross_validation
наmodel_selection
.
Вывод
Мы не можем контролировать ограничения, налагаемые операционной системой, но обновить проект Enron до Python 3 не так уж сложно. А благодаря современным сервисам, таким как GitHub, это нужно сделать только один раз.
А теперь возвращайся и учись!
Если статья вам понравилась и оказалась полезной, пожалуйста, купите мне кофе.