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文件都能夠正常的使用項目中的數據模型操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM