簡介
對於官方的解釋,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時要通知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文件都能夠正常的使用項目中的數據模型操作。