thefourtheye's weblog

opinions are my own; try code/suggestions at your own risk

Python 3.5 and Django 1.7's HTMLParseError

| Comments

I just updated my Python installation to 3.5 Alpha 1 and started with Django today and I hit a road block already. It all went fine, when I created the virtual environment and installed Django 1.7.4 in it. And then when I did startproject, I got AttributeError: module 'html.parser' has no attribute 'HTMLParseError'.
(py3.5venv) ➜  myProject git:(master) ✗ django-admin.py startproject myProject
Traceback (most recent call last):
File "/py3.5venv/bin/django-admin.py", line 5, in
management.execute_from_command_line()
File "/py3.5venv/lib/python3.5/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
utility.execute()
File "/py3.5venv/lib/python3.5/site-packages/django/core/management/__init__.py", line 354, in execute
django.setup()
File "/py3.5venv/lib/python3.5/site-packages/django/__init__.py", line 18, in setup
from django.utils.log import configure_logging
File "/py3.5venv/lib/python3.5/site-packages/django/utils/log.py", line 13, in
from django.views.debug import ExceptionReporter, get_exception_reporter_filter
File "/py3.5venv/lib/python3.5/site-packages/django/views/debug.py", line 10, in
from django.http import (HttpResponse, HttpResponseServerError,
File "/py3.5venv/lib/python3.5/site-packages/django/http/__init__.py", line 4, in
from django.http.response import (
File "/py3.5venv/lib/python3.5/site-packages/django/http/response.py", line 13, in
from django.core.serializers.json import DjangoJSONEncoder
File "/py3.5venv/lib/python3.5/site-packages/django/core/serializers/__init__.py", line 23, in
from django.core.serializers.base import SerializerDoesNotExist
File "/py3.5venv/lib/python3.5/site-packages/django/core/serializers/base.py", line 6, in
from django.db import models
File "/py3.5venv/lib/python3.5/site-packages/django/db/models/__init__.py", line 6, in
from django.db.models.query import Q, QuerySet, Prefetch # NOQA
File "/py3.5venv/lib/python3.5/site-packages/django/db/models/query.py", line 13, in
from django.db.models.fields import AutoField, Empty
File "/py3.5venv/lib/python3.5/site-packages/django/db/models/fields/__init__.py", line 18, in
from django import forms
File "/py3.5venv/lib/python3.5/site-packages/django/forms/__init__.py", line 6, in
from django.forms.fields import * # NOQA
File "/py3.5venv/lib/python3.5/site-packages/django/forms/fields.py", line 18, in
from django.forms.utils import from_current_timezone, to_current_timezone
File "/py3.5venv/lib/python3.5/site-packages/django/forms/utils.py", line 15, in
from django.utils.html import format_html, format_html_join, escape
File "/py3.5venv/lib/python3.5/site-packages/django/utils/html.py", line 16, in
from .html_parser import HTMLParser, HTMLParseError
File "/py3.5venv/lib/python3.5/site-packages/django/utils/html_parser.py", line 12, in
HTMLParseError = _html_parser.HTMLParseError
AttributeError: module 'html.parser' has no attribute 'HTMLParseError'
Then Antti Haapala (a friend from Stakoverflow's Python Chat room) found out that it is because HTMLParseError is deprecated from Python 3.3 onwards and removed in Python 3.5, as per the official documentation. He continued the investigation and found out that django guys are already aware of this, as they have a bug raised, and the fix has been already delivered to the code repository.
Now, all we can do is, wait for the version of django which officially supports Python 3.5 or manually patch html_parser.py file as per the above shown fix. Even if we patch it manually, there is no guarantee that everything else will work fine.