An idea: Catch the exception; in the handler, try to simply "import django". If this works, reraise, if it fails, print helpful message.
On Thursday 31 March 2016 20:15:05 Tim Graham wrote: > 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. > > > [0] https://github.com/django/django/pull/6314