2012-01-11 24 views
26

Tengo problemas para configurar DJANGO_SETTINGS_MODULE para mi proyecto Django.¿Cómo puedo establecer correctamente DJANGO_SETTINGS_MODULE para mi proyecto Django (estoy usando virtualenv)?

Tengo un directorio en ~/dev/django-project. En este directorio tengo un entorno virtual que he configurado con virtualenv, y también un proyecto django llamado "flor" con una aplicación llamada "onora". Correr tree -L 3 de ~/dev/django-project/ me muestra lo siguiente:

. 
├── Procfile 
├── blossom 
│   ├── __init__.py 
│   ├── __init__.pyc 
│   ├── fixtures 
│   │   └── initial_data_test.yaml 
│   ├── manage.py 
│   ├── onora 
│   │   ├── __init__.py 
│   │   ├── __init__.pyc 
│   │   ├── admin.py 
│   │   ├── admin.pyc 
│   │   ├── models.py 
│   │   ├── models.pyc 
│   │   ├── tests.py 
│   │   └── views.py 
│   ├── settings.py 
│   ├── settings.pyc 
│   ├── sqlite3-database 
│   ├── urls.py 
│   └── urls.pyc 
├── blossom-sqlite3-db2 
├── requirements.txt 
└── virtual_environment 
    ├── bin 
    │   ├── activate 
    │   ├── activate.csh 
    │   ├── activate.fish 
    │   ├── activate_this.py 
    │   ├── django-admin.py 
    │   ├── easy_install 
    │   ├── easy_install-2.7 
    │   ├── gunicorn 
    │   ├── gunicorn_django 
    │   ├── gunicorn_paster 
    │   ├── pip 
    │   ├── pip-2.7 
    │   ├── python 
    │   └── python2.7 -> python 
    ├── include 
    │   └── python2.7 -> /System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 
    └── lib 
     └── python2.7 

Estoy tratando de volcar mis datos de la base de datos con el comando

django-admin.py dumpdata 

Mi enfoque es ejecutar cd ~/dev/django-project y luego ejecutar source virtual_environment/bin/activate y luego ejecutar django-admin.py dumpdata

Sin embargo, estoy consiguiendo el error siguiente:

ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined. 

he hecho un poco buscando en Google y encontré esta página: https://docs.djangoproject.com/en/dev/topics/settings/#designating-the-settings

que me diga que

When you use Django, you have to tell it which settings you're using. Do this by using an environment variable, DJANGO_SETTINGS_MODULE. The value of DJANGO_SETTINGS_MODULE should be in Python path syntax, e.g. mysite.settings. Note that the settings module should be on the Python import search path.

Siguiendo una sugerencia en Setting DJANGO_SETTINGS_MODULE under virtualenv? I adjuntas las líneas

export DJANGO_SETTINGS_MODULE="blossom.settings" 
echo $DJANGO_SETTINGS_MODULE 

a virtual_environment/bin/activar. Ahora, cuando ejecuto el comando de activación para activar el entorno virtual, consigo la lectura de salida:

DJANGO_SETTINGS_MODULE set to blossom.settings 

Esto se ve bien para mí, pero ahora el problema que tengo es que la ejecución de

django-admin.py dumpdata 

devuelve el siguiente error:

ImportError: Could not import settings 'blossom.settings' (Is it on sys.path?): No module named blossom.settings 

¿Qué estoy haciendo mal? ¿Cómo puedo verificar el sys.path? ¿Cómo se supone que esto funcione?

Gracias.

Respuesta

40

No ejecute django-admin.py para nada que no sea la creación del proyecto inicial. Para todo después de eso, use manage.py, que se encarga de encontrar las configuraciones.

+1

Gracias - 'python blossom/manage.py dumpdata' funcionó como se esperaba. – Deonomo

+0

Es cierto. Entonces, ¿por qué los documentos django dicen "Use exactamente uno de configure() o DJANGO_SETTINGS_MODULE. No ambos, y ** no ninguno **". ? https://docs.djangoproject.com/en/dev/topics/settings/ – lajarre

+7

Pensamiento actual: como aparece en el [sitio "DeployDjango"] (http://www.deploydjango.com/django_project_structure/index.html) y el reciente * [Two Scoops of Django] (http://django.2scoops.org/) * book - es que 'django-admin.py' con configuraciones separadas funciona perfectamente bien, y en realidad es preferible al uso de' manage. py'. – supervacuo

15

que acabamos de encontrar el mismo error, y finalmente lograron averiguar lo que estaba pasando (la gran pista era (Is it on sys.path?) en el ImportError).

Usted necesita agregar el directorio del proyecto a PYTHONPATH - esto es lo que significa la documentación por

Note that the settings module should be on the Python import search path.

Para ello, ejecute

$ export PYTHONPATH=$PYTHONPATH:$PWD 

desde el directorio ~/dev/django-project antes de ejecutar django-admin.py.

puede agregar a este comando (en sustitución de $PWD por la vía real a su proyecto, es decir, ~/dev/django-project) a la escritura de su virtualenv source. Si elige avanzar al virtualenvwrapper en algún momento (que está diseñado para este tipo de situación), puede agregar la línea export PY... al script de gancho postactivate autogenerado.

mkdjangovirtualenv automatiza esto aún más, agregando la entrada apropiada para la ruta de Python para usted, pero yo no lo he probado.

+0

Sucio. Pero trabajando y útil. Estás alentando eludir problemas. Si algo no está en sys.path, esto significa que necesita ser empaquetado e instalado, no hackeado en sys.path. Lo sé, estoy resolviendo un problema, creando dos más. – bartekbrak

+0

Interesante: ¿cómo crees que un proyecto de Django en desarrollo debe agregarse a 'sys.path', si no es por la opción' --pythonpath' de 'manage.py',' django-admin.py', o 'PYTHONPATH' env var (ninguno de los cuales parece" más sucio "que los demás). – supervacuo

+1

Empaquete (cree setup.py) e instálelo mediante pip inestall [-e]. Eche un vistazo a la explicación prolongada: https://gist.github.com/bartekbrak/42d59fd43a9af14a0cc5 – bartekbrak

10

En la máquina de tipo Unix puede simplemente crear un alias virtualenv como este y utilizar alias en lugar de escribir cada vez que:

Bashrc

alias cool='source /path_to_ve/bin/activate; export DJANGO_SETTINGS_MODULE=django_settings_folder.settings; cd path_to_django_project; export PYTHONPATH=$PYTHONPATH:$PWD'

+3

esto en realidad resolvió mi problema en comparación con las otras respuestas. ¡Gracias! –

0

Sé que hay un montón respuestas, pero éste trabajado para mí solo para el registro.

  1. Navegue a la carpeta .virtual_env donde se encuentran todos los entornos virtuales.
  2. Ir a la carpeta del entorno específico de su proyecto
  3. Añadir "DJANGO_SETTINGS_MODULE exportación = .settings o 'DJANGO_SETTINGS_MODULE exportación = .settings.local' si está utilizando un archivo de configuración independiente almacena en una configuración de la carpeta
0

Mi alternativa favorita está pasando archivo de configuración como parámetro de tiempo de ejecución para manage.py en una sintaxis paquete python, por ejemplo:

python manage.py runserver --settings folder.filename 

más información django docs

Cuestiones relacionadas