如何使用 python-decouple 在预期路径之外加载 .env 文件?
How do you use python-decouple to load a .env file outside the expected paths?
我不得不将我的 .env
文件保存在项目根目录之外的非标准路径中(完全在一个单独的目录中)。
假设我在 /var/projects/my_project
中有我的 Django 项目,尽管我在 /opt/envs/my-project/.env
中有我的 .env
文件,其中存储了我的 SECRET_KEY
。在我的 settings.py
文件中,我想在该路径中明确使用 .env
文件,这样我仍然可以这样做:
from decouple import config
secret_key = config('SECRET_KEY')
我想通了。
不是导入 decouple.config
并执行通常的 config('FOOBAR')
,而是使用 RepositoryEnv('/path/to/env-file')
.
创建一个新的 decouple.Config
对象
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.
# i.e. config('SECRET_KEY') = env_config.get('SECRET_KEY')
SECRET_KEY = env_config.get('SECRET_KEY')
希望这对某人有所帮助。
如果你查看解耦实现,config 只是一个预实例化的 AutoConfig:
config = AutoConfig()
但 AutoConfig 将 search_path
作为可选参数,因此我们可以执行以下操作:
from decouple import AutoConfig
config = AutoConfig(search_path='/opt/envs/my-project')
那你就照常做吧:
secret_key = config('SECRET_KEY')
现在,django-decouple==2.1
支持在项目目录的任何父目录中包含 settings.ini
和 .env
文件。
(并且旧方法不再起作用。-from decouple import Config,RepositoryEnv 不起作用,AutoConfig 没有 search_path 作为参数。)
这很方便,因为您希望将 settings.ini
保留在本地计算机的项目文件夹中,并且希望在 staging/prod 服务器上进行干净的签出,因此 settings.ini
最好放在项目文件夹之外。
我不得不将我的 .env
文件保存在项目根目录之外的非标准路径中(完全在一个单独的目录中)。
假设我在 /var/projects/my_project
中有我的 Django 项目,尽管我在 /opt/envs/my-project/.env
中有我的 .env
文件,其中存储了我的 SECRET_KEY
。在我的 settings.py
文件中,我想在该路径中明确使用 .env
文件,这样我仍然可以这样做:
from decouple import config
secret_key = config('SECRET_KEY')
我想通了。
不是导入 decouple.config
并执行通常的 config('FOOBAR')
,而是使用 RepositoryEnv('/path/to/env-file')
.
decouple.Config
对象
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.
# i.e. config('SECRET_KEY') = env_config.get('SECRET_KEY')
SECRET_KEY = env_config.get('SECRET_KEY')
希望这对某人有所帮助。
如果你查看解耦实现,config 只是一个预实例化的 AutoConfig:
config = AutoConfig()
但 AutoConfig 将 search_path
作为可选参数,因此我们可以执行以下操作:
from decouple import AutoConfig
config = AutoConfig(search_path='/opt/envs/my-project')
那你就照常做吧:
secret_key = config('SECRET_KEY')
现在,django-decouple==2.1
支持在项目目录的任何父目录中包含 settings.ini
和 .env
文件。
(并且旧方法不再起作用。-from decouple import Config,RepositoryEnv 不起作用,AutoConfig 没有 search_path 作为参数。)
这很方便,因为您希望将 settings.ini
保留在本地计算机的项目文件夹中,并且希望在 staging/prod 服务器上进行干净的签出,因此 settings.ini
最好放在项目文件夹之外。