[Fixed]-How to import a Django project settings.py Python file from a sub-directory?

10👍

This is going one level up from your question, but probably the best solution here is to implement your scripts as custom manage.py (django-admin.py) commands. This gives you all of Django’s functionality (including settings) for free with no ugly path-hacking, as well as command-line niceties like options parsing. I’ve never seen a good reason to write Django-related command-line scripts any other way.

16👍

I think your approach may be over-complicating something that Django 1.x provides for you. As long as your project is in your python path, you can set the environment variable DJANGO_SETTINGS_MODULE at the top of your script like so:

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'

In your command line script where you need to read your settings, simply import the settings module from ‘django.conf’ as you would do in your application code:

from django.conf import settings

And presto, you have your settings and a Django-enabled environment for your script.

I personally prefer to set my DJANGO_SETTINGS_MODULE using ‘/usr/bin/env’ in a bash script called ‘proj_env’ so I don’t have to repeat it

#!/bin/bash

proj_env="DJANGO_SETTINGS_MODULE=myproject.settings"

/usr/bin/env $proj_env ${*}

With this, now I can run any python script with my Django application in context:

proj_env python -m 'myproject.bin.myscript'

If you use virtualenv, this also gives you a good place to source the activate script.

etc. etc.

3👍

Add the parent directory to your path:

import sys
sys.path.append('../')
import settings

Update from comments:

Don’t forget the __init__.py file in
the directory that has your
settings.py – S.Lott

0👍

Let’s say your project directory is /opt/someProject/`

This has files like:

manage.py

Now you have you may have your sub directory anywhere, does not matter.
Eg. subdirectory could be like:

/opt/someproject/dir1/dir2

Now for you to import your project settings inside /opt/someProject/dir1/dir2

You need to set your PYTHONPATH variable

export PYTHONPATH=/opt/someproject/

Now to import modules from bin

from someproject import bin

Leave a comment