欢迎来到Louis的博客

人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。
扩大
缩小

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

简介

对于官方的解释,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文件都能够正常的使用项目中的数据模型操作。

posted on 2018-08-28 07:56  Louiszj  阅读(12833)  评论(0编辑  收藏  举报

导航