Me veo obligado a mantener mi archivo .env en una ruta no estándar fuera de la raíz de mi proyecto (en un directorio completamente separado).
Digamos que tengo mi proyecto Django en /var/projects/my_project , aunque tengo mi archivo .env en /opt/envs/my-project/.env donde está almacenada mi SECRET_KEY . En mi archivo settings.py , me gustaría usar explícitamente el archivo .env en esa ruta para poder seguir haciendo esto:
from decouple import config secret_key = config('SECRET_KEY')Me lo imaginé.
En lugar de importar decouple.config y hacer la config('FOOBAR') , cree un nuevo objeto decouple.Config usando RepositoryEnv('/path/to/env-file') .
from decouple import Config, RepositoryEnv DOTENV_FILE = '/opt/envs/my-project/.env' env_config = Config(RepositoryEnv(DOTENV_FILE)) # use the Config().get() method as you normally would since # decouple.config uses that internally. # ie config('SECRET_KEY') = env_config.get('SECRET_KEY') SECRET_KEY = env_config.get('SECRET_KEY')Esperemos que esto ayude a alguien.
Si observa la implementación de desacoplamiento, la configuración es solo una configuración automática instanciada previamente:
config = AutoConfig() Pero AutoConfig toma como argumento opcional search_path para que podamos hacer lo siguiente:
from decouple import AutoConfig config = AutoConfig(search_path='/opt/envs/my-project')Entonces puedes hacer como de costumbre:
secret_key = config('SECRET_KEY')Ahora, django-decouple==2.1 admite archivos settings.ini y .env en cualquier directorio principal del directorio del proyecto.
(Y los métodos antiguos ya no funcionan. Desde desacoplar la configuración de importación, RepositoryEnv no funciona, AutoConfig no tiene search_path como parámetro).
Esto es conveniente porque desearía mantener settings.ini en la carpeta del proyecto en su máquina local y desearía tener pagos limpios en el servidor de ensayo/producción, por lo tanto, settings.ini está mejor ubicado fuera de la carpeta del proyecto.