Ben Welsh (palewire) raised a proposal on a GitHub pull request [0]:
I've seen newbies flounder when they receive this error after running manage.py.
$ python manage.py
Traceback (most recent call last):
File "manage.py", line 7, in <module>
from django.core.management import execute_from_command_line
ImportError: No module named django.core.management
The root cause is almost always simple, like forgetting install Django with pip or neglecting to "activate" a virtual environment. But the Python jargon doesn't do much to help people new to our world connect the dots.
My proposal: Catch that error and print out a more verbose message that explains to the user exactly what's wrong. Here's my draft. I'd welcome any changes, but I think something along these lines could better welcome new people into Django.
Traceback (most recent call last):
File "manage.py", line 11, in <module>
installed and available on your PATH variable?")
ImportError: Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?
---------------------
Claude says, "I'm not convinced about this. Aren't we hiding other possibly helpful import errors (at least on Python 2)?"
Aymeric says, "I share Claude's concern. We've been constantly removing that sort of "helpful" exception wrapping from Django"
Aymeric again, after further investigation, "Importing
django.core.management
doesn't
ripple too far. Specifically it doesn't import any of the user's code.
This reduces the likelihood of masking useful errors. It will mask exception info if Django is installed incorrectly, for
instance because two installs happened in the same location (but I think
that's less likely since pip/virtualenv became mainstream and since we
added code to setup.py to detect existing installs).
Does anyone else have opinions on the change? I suppose another option could be to try to reraise the original exception with the "helpful message" added.