pelicula - python django documentation
¿Cómo importar un archivo Dththgo settings.py Python del proyecto desde un subdirectorio? (3)
Creé un subdirectorio de mi proyecto de Django llamado bin
donde quiero poner todas las secuencias de comandos de Python que se ejecutan en la línea de comandos. Algunos de estos scripts necesitan importar el archivo settings.py
mi proyecto Django que se encuentra en un directorio principal de bin
.
¿Cómo puedo importar el archivo settings.py
desde un subdirectorio del proyecto?
El código que utilizo en mi script de línea de comandos para establecer en el "contexto Django" del proyecto es:
from django.core.management import setup_environ
import settings
setup_environ(settings)
Esto funciona bien si el script está en el directorio raíz de mi proyecto.
Intenté los siguientes dos hacks para importar el archivo settings.py
y luego configurar el proyecto:
import os
os.chdir("..")
import sys
sys.path = [str(sys.path[0]) + "/../"] + sys.path
El truco cruel puede importar settings.py
, pero luego aparece el error:
project_module = __import__(project_name, {}, {}, [''''])
ValueError: Empty module name
Agregue el directorio padre a su ruta:
import sys
sys.path.append(''../'')
import settings
Actualización de los comentarios:
No olvide el archivo
__init__.py
en el directorio que tiene su configuración.py - S.Lott
Creo que su enfoque puede ser una complicación excesiva de algo que Django 1.x le proporciona. Siempre que su proyecto esté en su ruta de Python, puede establecer la variable de entorno DJANGO_SETTINGS_MODULE en la parte superior de su secuencia de comandos de la siguiente manera:
import os
os.environ[''DJANGO_SETTINGS_MODULE''] = ''myproject.settings''
En la secuencia de comandos de la línea de comandos donde necesita leer su configuración, simplemente importe el módulo de configuración desde ''django.conf'' como lo haría en su código de aplicación:
from django.conf import settings
Y listo, tiene su configuración y un entorno habilitado para Django para su script.
Personalmente prefiero configurar mi DJANGO_SETTINGS_MODULE usando ''/ usr / bin / env'' en un script de bash llamado ''proj_env'', así no tengo que repetirlo
#!/bin/bash
proj_env="DJANGO_SETTINGS_MODULE=myproject.settings"
/usr/bin/env $proj_env ${*}
Con esto, ahora puedo ejecutar cualquier script de Python con mi aplicación Django en contexto:
proj_env python -m ''myproject.bin.myscript''
Si usa virtualenv, esto también le proporciona un buen lugar para obtener el script de activación.
etcétera etcétera.
Esto va un nivel por encima de su pregunta, pero probablemente la mejor solución aquí es implementar sus scripts como comandos personalizados de manage.py (django-admin.py) . Esto le brinda toda la funcionalidad de Django (incluidas las configuraciones) de forma gratuita sin desagradable piratería, así como detalles de líneas de comandos como el análisis de opciones. Nunca he visto una buena razón para escribir scripts de línea de comandos relacionados con Django de ninguna otra manera.