19

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

假设我有我的 Django 项目/var/projects/my_project,尽管我的.env文件在/opt/envs/my-project/.envSECRET_KEY的存储位置。在我的settings.py文件中,我想明确使用该.env路径中的文件,以便我仍然可以这样做:

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

3 回答 3

35

我想到了。

代替导入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')

希望这可以帮助某人。

于 2017-04-23T16:38:25.430 回答
14

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

config = AutoConfig()

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

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

然后你可以像往常一样做:

secret_key = config('SECRET_KEY')
于 2020-06-19T19:26:34.313 回答
0

现在,django-decouple==2.1支持在项目目录的任何父目录中拥有settings.ini.env文件。

(并且旧方法不再起作用。-从解耦导入配置,RepositoryEnv 不起作用,AutoConfig 没有 search_path 作为参数。)

这很方便,因为您希望将 保存settings.ini在本地计算机上的项目文件夹中,并且希望在 staging/prod 服务器上进行干净的签出,因此settings.ini最好位于项目文件夹之外。

于 2021-12-16T00:01:56.537 回答