你如何使用python-decouple加载预期路径之外的.env文件?

时间:2017-04-23 11:56:03

标签: python django config decouple

我被迫将我的.env文件保存在项目根目录之外的非标准路径中(完全在一个单独的目录中)。

假设我在/var/projects/my_project中有我的Django项目,但我.env中的/opt/envs/my-project/.env文件存储了我的SECRET_KEY。在我的settings.py文件中,我想在该路径中明确使用.env文件,以便我仍然可以执行此操作:

from decouple import config
secret_key = config('SECRET_KEY')

2 个答案:

答案 0 :(得分:18)

我明白了。

使用decouple.config创建新的config('FOOBAR')对象,而不是导入decouple.Config并执行常规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. 
# i.e. config('SECRET_KEY') = env_config.get('SECRET_KEY')
SECRET_KEY = env_config.get('SECRET_KEY')

希望这有助于某人。

答案 1 :(得分:2)

如果查看解耦实现,则config只是预先实例化的AutoConfig:

config = AutoConfig()

但是AutoConfig将search_path作为可选参数,因此我们可以执行以下操作:

from decouple import AutoConfig
config = AutoConfig(search_path='/opt/envs/my-project')

然后您可以照常进行操作:

secret_key = config('SECRET_KEY')