動(dòng)態(tài)引入模塊并注入模塊參數(shù)【python】【2022-12-30】

項(xiàng)目里有一些配置信息入问,是以模塊參數(shù)的形式存在的(形如django的settings.py)爬泥。因?yàn)殚_發(fā)環(huán)境和生產(chǎn)環(huán)境的區(qū)別漱抓,這些配置信息也有區(qū)別童番。如果每次發(fā)布時(shí)都要手動(dòng)地將這些配置信息修改成生產(chǎn)環(huán)境的內(nèi)容精钮,然后再發(fā)布,很容易出問題妓盲,能不能通過一種方式杂拨,讓項(xiàng)目能自動(dòng)識(shí)別當(dāng)前的環(huán)境,獲取正確的參數(shù)呢悯衬?弹沽?

首先,將配置文件拆分成四個(gè)筋粗,統(tǒng)一放在一個(gè)package下:

見名知意策橘,大部分的配置都放在base.py里。對(duì)于不同環(huán)境要有不同配置的參數(shù)娜亿,要放到相應(yīng)的develop.py丽已、pilot.py或production.py中,后面三個(gè)的配置信息會(huì)覆蓋掉base.py的信息买决。

接下來的工作有兩項(xiàng):A 讓系統(tǒng)得知自己當(dāng)前所處的環(huán)境 B 將對(duì)應(yīng)的python模塊中的參數(shù)讀取出來沛婴,注入到package中吼畏。
對(duì)于A,很簡(jiǎn)單嘁灯,使用socket.gethostname()獲取當(dāng)前主機(jī)名即可泻蚊。

難點(diǎn)在于B。分兩步: 讀取模塊中的參數(shù)丑婿;注入到package中性雄。
做法如下: 在app_settings.init中:

import socket
from loguru import logger
import traceback
import importlib

from .base import *


host_name = socket.gethostname().upper()
try:
    # 獲取模塊參數(shù)
    if host_name.startswith("POR"):
        logger.debug("### POR ENV ###")
        settings = importlib.import_module('config.app_settings.production')
    elif host_name.startswith("PILOT"):
        logger.debug("### PILOT ENV ###")
        settings = importlib.import_module('config.app_settings.pilot')
    else:
        logger.debug("### DEVELOP ENV ###")
        settings = importlib.import_module('config.app_settings.develop')
    
    # 參數(shù)注入。注意跳過內(nèi)置參數(shù)(以_開頭)
    for param in dir(settings):
        if param.startswith("_"):
            pass
        else:
            globals()[param] = getattr(settings, param)

except Exception as e:
    err_msg = "Error happened during handle config items in init of app_settings: " + str(e)
    logger.error(err_msg)
    logger.error(traceback.format_exc())

如何在項(xiàng)目的其他位置使用參數(shù):先引入from config import app_settings羹奉,然后通過app_settings.XXX來獲取參數(shù)值秒旋。

測(cè)試:
base.py:

AAA = 'baseAAA'

develop.py:

AAA = "developAAA"

項(xiàng)目的其他位置:

from config import app_settings

# ...

print(app_settings.AAA)

結(jié)果:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市诀拭,隨后出現(xiàn)的幾起案子迁筛,更是在濱河造成了極大的恐慌,老刑警劉巖耕挨,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瑰煎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡俗孝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門魄健,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赋铝,“玉大人,你說我怎么就攤上這事沽瘦「锕牵” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵析恋,是天一觀的道長(zhǎng)良哲。 經(jīng)常有香客問我,道長(zhǎng)助隧,這世上最難降的妖魔是什么筑凫? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮并村,結(jié)果婚禮上巍实,老公的妹妹穿的比我還像新娘。我一直安慰自己哩牍,他們只是感情好棚潦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著膝昆,像睡著了一般丸边。 火紅的嫁衣襯著肌膚如雪叠必。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天妹窖,我揣著相機(jī)與錄音纬朝,去河邊找鬼。 笑死嘱吗,一個(gè)胖子當(dāng)著我的面吹牛玄组,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谒麦,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼俄讹,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了绕德?” 一聲冷哼從身側(cè)響起患膛,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎耻蛇,沒想到半個(gè)月后踪蹬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡臣咖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年跃捣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夺蛇。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疚漆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刁赦,到底是詐尸還是另有隱情娶聘,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布甚脉,位于F島的核電站丸升,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏牺氨。R本人自食惡果不足惜狡耻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望猴凹。 院中可真熱鬧酝豪,春花似錦、人聲如沸精堕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽歹篓。三九已至瘫证,卻和暖如春揉阎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背背捌。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國打工毙籽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人毡庆。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓坑赡,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親么抗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子毅否,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容