前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >os.environ详解-DJANGO_SETTINGS_MODULE 环境变量是如何设置的

os.environ详解-DJANGO_SETTINGS_MODULE 环境变量是如何设置的

作者头像
用户9184480
发布2024-12-25 11:13:28
发布2024-12-25 11:13:28
840
举报
文章被收录于专栏:云计算linux云计算linux

对于官方的解释,environ是一个字符串所对应环境的映像对象,也就是我们常说的系统环境变量.

看看里面有些什么,我的是mac系统,先看看mac系统环境变量

在看下os.environ提供的是什么东西。

import os

for i, v in enumerate(os.environ.items(), 1): print(i, v) 复制代码 1 ('PATH', '/Users/zhangjin/2018/Django_2018/venv/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/mysql/bin') 2 ('PYTHONPATH', '/Applications/PyCharm.app/Contents/helpers/pycharm_matplotlib_backend:/Users/zhangjin/2018/Django_2018') 3 ('SHELL', '/bin/bash') 4 ('PYTHONIOENCODING', 'UTF-8') 5 ('VERSIONER_PYTHON_PREFER_32_BIT', 'no') 6 ('USER', 'zhangjin') 7 ('TMPDIR', '/var/folders/nr/0d3xpgl16cb036rk2_gh1jr00000gn/T/') 8 ('PS1', '(venv) ') 9 ('SSH_AUTH_SOCK', '/private/tmp/com.apple.launchd.OKzHAUzpN0/Listeners') 10 ('VIRTUAL_ENV', '/Users/zhangjin/2018/Django_2018/venv') 11 ('XPC_FLAGS', '0x0') 12 ('PYTHONUNBUFFERED', '1') 13 ('VERSIONER_PYTHON_VERSION', '2.7') 14 ('__CF_USER_TEXT_ENCODING', '0x1F5:0x19:0x34') 15 ('Apple_PubSub_Socket_Render', '/private/tmp/com.apple.launchd.JFjmO3gaCM/Render') 16 ('LOGNAME', 'zhangjin') 17 ('LC_CTYPE', 'zh_CN.UTF-8') 18 ('XPC_SERVICE_NAME', 'com.jetbrains.pycharm.19716') 19 ('PWD', '/Users/zhangjin/2018/Django_2018/login') 20 ('PYCHARM_HOSTED', '1') 21 ('HOME', '/Users/zhangjin') 22 ('PYCHARM_MATPLOTLIB_PORT', '49205') 23 ('PYVENV_LAUNCHER', '/Users/zhangjin/2018/Django_2018/venv/bin/python') 复制代码 对比一下,是不是发现系统环境变量都在这里面了,这就对了,python提供的os.environ是一个类字典的数据类型对象,存放着所有系统相关的环境变量,所以如果要在你的python程序中操作环境变量时就需要对这个对象进行操作了。

在学习Django的setting文件时,有这么一段话:

指定配置文件 DJANGO_SETTINGS_MODULE 使用Django时要通知Django当前使用的是哪个配置文件。可以改变环境变量 DJANGO_SETTINGS_MODULE 实现这一点。

当我们使用manage.py运行起本地的web服务器时,为了让Django知道使用哪个配置文件,就指定了DJANGO_SETTINGS_MODULE的环境变量的路径,我们看下manage.py

复制代码 #!/usr/bin/env python import os import sys

if name == 'main': os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Django_2018.settings') #使用setdefault的方式添加新的环境变量 try: from django.core.management import execute_from_command_line except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed and " "available on your PYTHONPATH environment variable? Did you " "forget to activate a virtual environment?" ) from exc execute_from_command_line(sys.argv) 复制代码 由于不同的系统环境变量命名是有所不同的,比如在类Unix系统家目录的环境变量是的os.environ['HOME'] 而在windows中就是'HOMEPATH'了,

又比如linux下的USER在windows下面对应的就是USERNAME.

总结这些差异来说,他们都是各自系统的本身特性造成的,比如你用的是gnome版的ubuntu,那么key里面就会多出一条['GNOME_DESKTOP_SESSION_ID'].

key字段详解 windows:

复制代码 os.environ['HOMEPATH']:当前用户主目录。 os.environ['TEMP']:临时目录路径。 os.environ[PATHEXT']:可执行文件。 os.environ['SYSTEMROOT']:系统主目录。 os.environ['LOGONSERVER']:机器名。 os.environ['PROMPT']:设置提示符。 复制代码 linux: os.environ['USER']:当前使用用户。 os.environ['LC_COLLATE']:路径扩展的结果排序时的字母顺序。 os.environ['SHELL']:使用shell的类型。 os.environ['LAN']:使用的语言。 os.environ['SSH_AUTH_SOCK']:ssh的执行路径。

django 解决: You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.c 在文件开始加上

import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djblog.settings") 注意一定要加在load model.xxx之前

目的是为了任何一个django project中的*.py文件都能够正常的使用项目中的数据模型操作。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档