在 miniconda 环境中隐藏 django secret_key 时出错

Posted

技术标签:

【中文标题】在 miniconda 环境中隐藏 django secret_key 时出错【英文标题】:Error when hiding django secret_key in miniconda environment 【发布时间】:2021-09-07 06:00:46 【问题描述】:

我是一个完全的新手,我正在尝试做这个项目,这是我的第一次,而且几乎完成了。我尝试了这个 SO thread 中提到的所有方法来从设置中移动密钥。在每种方法中,我都遇到了某种错误,即使来自这个官方的 django 文档mathod。我找不到哪里出错了。

当密钥在 settings.py 中时,一切都非常顺利。但是我需要在 git 中推送我的代码,所以我必须从 settings.py 中隐藏它。

当我尝试使用django-environ 时,我现在正在添加详细信息,以将密钥保存在 settings.py 之外。

我将内容放在根项目文件夹中。

我正在使用 miniconda:4.10.1。这是我的 requirement.txt。

                # platform: linux-64
            _libgcc_mutex=0.1=main
            _openmp_mutex=4.5=1_gnu
            appdirs=1.4.4=py_0
            asgiref=3.3.4=pyhd3eb1b0_0
            attrs=21.2.0=pyhd3eb1b0_0
            black=19.10b0=py_0
            ca-certificates=2021.5.30=ha878542_0
            certifi=2021.5.30=py39hf3d152e_0
            click=8.0.1=pyhd3eb1b0_0
            django=3.2.4=pyhd3eb1b0_0
            django-environ=0.4.5=py_1
            importlib-metadata=3.10.0=py39h06a4308_0
            krb5=1.17.1=h173b8e3_0
            ld_impl_linux-64=2.35.1=h7274673_9
            libedit=3.1.20210216=h27cfd23_1
            libffi=3.3=he6710b0_2
            libgcc-ng=9.3.0=h5101ec6_17
            libgomp=9.3.0=h5101ec6_17
            libpq=12.2=h20c2e04_0
            libstdcxx-ng=9.3.0=hd4cf53a_17
            mypy_extensions=0.4.1=py39h06a4308_0
            ncurses=6.2=he6710b0_1
            openssl=1.1.1k=h7f98852_0
            pathspec=0.7.0=py_0
            pip=21.1.2=py39h06a4308_0
            psycopg2=2.8.6=py39h3c74f83_1
            python=3.9.5=h12debd9_4
            python_abi=3.9=1_cp39
            pytz=2021.1=pyhd3eb1b0_0
            readline=8.1=h27cfd23_0
            regex=2021.4.4=py39h27cfd23_0
            setuptools=52.0.0=py39h06a4308_0
            six=1.16.0=pyh6c4a22f_0
            sqlite=3.35.4=hdfb4753_0
            sqlparse=0.4.1=py_0
            tk=8.6.10=hbc83047_0
            toml=0.10.2=pyhd3eb1b0_0
            typed-ast=1.4.2=py39h27cfd23_1
            typing_extensions=3.7.4.3=pyha847dfd_0
            tzdata=2020f=h52ac0ba_0
            wheel=0.36.2=pyhd3eb1b0_0
            xz=5.2.5=h7b6447c_0
            zipp=3.4.1=pyhd3eb1b0_0
            zlib=1.2.11=h7b6447c_3

settings.py

                import os
            import environ
            from pathlib import Path

            env = environ.Env(
                # set casting, default value
                DEBUG=(bool, False)
            )

            # reading .env file
            environ.Env.read_env()

            # Build paths inside the project like this: BASE_DIR / 'subdir'.
            BASE_DIR = Path(__file__).resolve().parent.parent


            # Quick-start development settings - unsuitable for production
            # See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/

            # SECURITY WARNING: keep the secret key used in production secret!
            SECRET_KEY = env('SECRET_KEY')

            # False if not in os.environ
            DEBUG = env('DEBUG')

我没有添加其余设置。我不认为它重要。如果需要,请提及我会更新。

我将 .env 文件放在项目的根目录中,其中放置了 manage.py 和 db.sqlite3

.env

                #env file

            DEBUG=on

            #copied the entire line from settings.py
            SECRET_KEY ='xxxx django secret key here xxxx'

在运行“python manage.py runserver”时,我收到了这个错误。

我不确定我缺少什么。当我尝试每种方法时,我遇到了某种错误,但错误并不相同。抱歉,我无法在这里解释所有方法和错误。

在此表单中提出了几个问题。但大多数都没有回答,有些没有准确地解释我的情况。请提及是否需要其他任何内容或进行更多说明。

【问题讨论】:

【参考方案1】:

首先检查你是否安装了django-environ,也许你的requirements.txt中有输入错误,它应该是django-environ=0.4.5而不是django-environ=0.4.5=py_1 您可以在read_env(env_file="relative_path_of_your_env_file") 中传递.env 的路径

它将.env 文件读入os.environ

如果没有给出指向 dotenv 路径的路径,是否会进行肮脏的魔法堆栈回溯 找到manage.py,然后找到dotenv

通过此代码https://github.com/joke2k/django-environ/blob/master/environ/environ.py#L614

【讨论】:

requirement.txt 由“conda list -e > requirements.txt”命令自动生成。在 settings.py 中导入时没有错误。 我使用这个安装了 django-environ:“conda install -c conda-forge django-environ” 好吧,让我看看我没有使用 conda Hello @legacy 检查此docs.conda.io/projects/conda/en/4.6.0/user-guide/tasks/… 以设置环境变量 在第一行错误中有一个用户警告。他们正在 app 目录中寻找 .env 文件。不在根目录下。【参考方案2】:

从文件树的结构来看,.env 文件是放在项目的根目录下的。检查错误消息时,可以看到正在搜索 .env 文件的人正在与 settings.py 相同的位置进行检查。

所以,简短的回答是,如果您使用 django-environ 将密钥保存在外面,请将 .env 文件与 settings.py 在同一目录中。

更详细的内容可以参考这个link。我觉得它适合新手。

【讨论】:

您好@legacy,如果我的回答对您有帮助,请随时接受答案

以上是关于在 miniconda 环境中隐藏 django secret_key 时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何在vsc上选择远程miniconda特定的虚拟环境中的Python解释器(4步)

使用Miniconda一行代码配置Pytorch环境

深度学习 01安装环境详解之 miniconda

深度学习 01安装环境详解之 miniconda

安装django和selenium

linux安装miniconda3