Pycharm:为运行manage.py任务设置环境变量

 xhhh5_236 发布于 2023-01-29 16:09

我已将我的SECRET_KEY值从我的设置文件中移出,并在我加载virtualenv时设置它.我可以确认该值是否存在python manage.py shell.

当我运行Django控制台时,SECRET_KEY它应该丢失.所以在首选项中,我转到Console> Django Console并加载SECRET_KEY适当的值.我回到Django控制台,SECRET_KEY就在那里.

正如所料,我还没有运行manage.py任务,因为它还没有找到SECRET_KEY.所以我进入Run> Edit Configurations SECRET_KEY进入Django服务器和Django测试,并进入项目服务器.重启Pycharm,确认密钥.

当我运行manage.py任务时runserver,我仍然可以KeyError: 'SECRET_KEY'.

我在哪里放这把钥匙?

6 个回答
  • 同样在这里,由于某种原因,PyCharm无法看到导出的env变种.现在我在PyCharm运行/调试配置 - >"环境变量"中设置SECRET_KEY

    2023-01-29 16:10 回答
  • 在Pycharm中,manage.py任务在一个孤立的进程中运行,该进程无法访问您的环境变量(与Run/Debug不同).

    最简单的解决方案是通过.env直接从文件中读取它们,使您的python代码了解环境变量.

    看看:https://github.com/joke2k/django-environ

    import environ
    
    env = environ.Env.read_env() # reading .env file
    
    SECRET_KEY = env('SECRET_KEY')
    

    这样,您就拥有了单一的配置源,并且IDE中的设置更少.

    希望有所帮助,

    2023-01-29 16:10 回答
  • 您可以通过以下方式设置manage.py任务环境变量:

    偏好| 语言与框架| Django的| Manage.py任务

    通过run/debug/console配置设置env变量不会影响内置pycharm的manage.py任务.

    2023-01-29 16:10 回答
  • 另一个对我有用的选择:

      打开一个终端

      激活项目的virtualenv,这将导致钩子运行并设置环境变量

      从此命令行启动PyCharm.

    然后Pycharm可以访问环境变量.可能是因为与PyCharm进程有关的事情是shell的一个孩子.

    2023-01-29 16:11 回答
  • 要在PyCharm中设置环境变量,请执行以下操作:

    打开"文件"菜单

    点击"设置"

    点击"控制台"旁边的"+"号

    单击Python控制台

    单击环境变量旁边的"..."按钮

    单击"+"以添加环境变量

    2023-01-29 16:11 回答
  • 由于Pycharm未从终端启动,因此不会加载您的环境.简而言之,任何GUI程序都不会继承SHELL变量.请参阅此原因(假设使用Mac).

    但是,这个问题有几个基本的解决方案.当@ user3228589发布时,您可以将其设置为PyCharm中的变量.这有几个优点和缺点.我个人不喜欢这种方法,因为它不是single source.为了解决这个问题,我在settings.py文件的顶部使用了一个小函数,它在本地.env文件中查找变量.我把所有的"私人"东西放在那里.我也可以在我的virtualenv中引用它.

    这是它的样子.

    - settings.py

    def get_env_variable(var_name, default=False):
        """
        Get the environment variable or return exception
        :param var_name: Environment Variable to lookup
        """
        try:
            return os.environ[var_name]
        except KeyError:
            import StringIO
            import ConfigParser
            env_file = os.environ.get('PROJECT_ENV_FILE', SITE_ROOT + "/.env")
            try:
                config = StringIO.StringIO()
                config.write("[DATA]\n")
                config.write(open(env_file).read())
                config.seek(0, os.SEEK_SET)
                cp = ConfigParser.ConfigParser()
                cp.readfp(config)
                value = dict(cp.items('DATA'))[var_name.lower()]
                if value.startswith('"') and value.endswith('"'):
                    value = value[1:-1]
                elif value.startswith("'") and value.endswith("'"):
                    value = value[1:-1]
                os.environ.setdefault(var_name, value)
                return value
            except (KeyError, IOError):
                if default is not False:
                    return default
                from django.core.exceptions import ImproperlyConfigured
                error_msg = "Either set the env variable '{var}' or place it in your " \
                            "{env_file} file as '{var} = VALUE'"
                raise ImproperlyConfigured(error_msg.format(var=var_name, env_file=env_file))
    
    # Make this unique, and don't share it with anybody.
    SECRET_KEY = get_env_variable('SECRET_KEY')
    

    那么env文件看起来像这样:

    #!/bin/sh
    #
    # This should normally be placed in the ${SITE_ROOT}/.env
    #
    # DEPLOYMENT DO NOT MODIFY THESE..
    SECRET_KEY='XXXSECRETKEY'
    

    最后你的virtualenv/bin/postactivate可以获取这个文件.如果您愿意,可以进一步导出变量并按照此处所述导出变量,但由于设置文件直接调用.env,因此根本不需要.

    2023-01-29 16:11 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有