Django 1.8 con Python 3.10, ya no es compatible.
Causa del error
En Django 1.8, el código intenta importar Mapping desde collections:
from collections import Mapping, OrderedDict
Sin embargo, en Python 3.10, Mapping fue movido a collections.abc, por lo que el import correcto debería ser:
from collections.abc import Mapping, OrderedDict
Dado que Django 1.8 no se ha actualizado para reflejar este cambio, falla al ejecutarse en versiones modernas de Python.
opciones:
- usar una version de python antigua
- usar una version mas nueva de django
- tratar de arreglar el codigo 👨🏻💻🤪
Django 1.8 funciona bien con Python 2.7, 3.4 o 3.5.
Django 1.8 es muy antiguo (2015) y ya no recibe soporte.
Python 3.5 está obsoleto y su soporte terminó en 2020.
sudo apt-get update; sudo apt-get install make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev ca-certificates
curl -fsSL https://pyenv.run | bash
nvim .zshrc
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - bash)"
eval "$(pyenv virtualenv-init -)"
reiniciar el shell
pyenv install --list |less
pyenv install 3.5.10
pyenv versions
pyenv virtualenv 3.5.10 django1.8 # /home/blessed/.pyenv/versions/3.5.10/envs/django1.8
pyenv activate django1.8
/home/blessed/.pyenv/versions/3.5.10/bin/python3.5 -m pip install django==1.8
/home/blessed/.pyenv/versions/3.5.10/bin/python3.5 -m pip install django==1.8 --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org
which django-admin
/home/blessed/.pyenv/versions/3.5.10/bin/django-admin startproject miproyecto
cd miproyecto
/home/blessed/.pyenv/versions/3.5.10/bin/python3.5 manage.py runserver
hasta aqui parece que funciona.
Tratando de parchar los errores para que django1.8 corra con python 3.10
django-admin startproject miproyecto
nvim /home/blessed/.local/lib/python3.10/site-packages/django/db/models/sql/query.py
from collections.abc import Mapping, OrderedDict
python3 manage.py runserver
nvim /home/blessed/.local/lib/python3.10/site-packages/django/core/paginator.py
python3 manage.py runserver
nvim /home/blessed/.local/lib/python3.10/site-packages/django/db/models/fields/__init__.py
Aparentemente funciona. 🤪
Recomendación
Django 1.8 es incompatible con Python 3.10. Aunque puedes seguir parchando errores, lo mejor sería:
Usar Python 3.5 si realmente necesitas Django 1.8.
Actualizar Django a una versión compatible con Python 3.10 (como Django 3.x o 4.x).