Я наставник 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, это нужно сделать только один раз.

А теперь возвращайся и учись!

Если статья вам понравилась и оказалась полезной, пожалуйста, купите мне кофе.