Saturday, August 4, 2018

Python can import it, but django-admin can’t

For the Install your Lino developer environment page I tried to run a demo project (lino_book.projects.min1) using django-admin, i.e. without needing a manage.py file:

$ go min1
$ python -c "import settings.demo"

Works perfectly. But then:

$ django-admin runserver --settings settings.demo
Traceback (most recent call last):
  File "/py27/bin/django-admin", line 11, in <module>
    sys.exit(execute_from_command_line())
  File "/py27/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/py27/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 308, in execute
    settings.INSTALLED_APPS
  File "/py27/local/lib/python2.7/site-packages/django/conf/__init__.py", line 56, in __getattr__
    self._setup(name)
  File "/py27/local/lib/python2.7/site-packages/django/conf/__init__.py", line 41, in _setup
    self._wrapped = Settings(settings_module)
  File "/py27/local/lib/python2.7/site-packages/django/conf/__init__.py", line 110, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named settings.demo

Strange…

Here is the same problem using newest Django and without Lino.

In an empty directory I create a very minimal settings.py with the following content:

INSTALLED_APPS = []
DEBUG = True

I install and activate a fresh environment with a Django:

$ virtualenv -p3 env
$ . env/bin/activate
$ pip install django

Now I am surprised that the following fails:

$ django-admin check --settings settings
Traceback (most recent call last):
...
ImportError: No module named 'settings'

This is strange because Python can import my settings.py without problem:

$ python -m settings
$ python -c "import settings"