簡體   English   中英

如何為導入創建默認的python子模塊

[英]How to create a default python submodule for import

我正在使用python設置文件。 我有以下結構:

settings
├── base.py
├── __init__.py
├── local.py
├── production.py
└── staging.py

設置模塊是從環境變量(例如“ settings.production”)中提取的。 這可以很好地工作,並替換了舊的inflexible settings.py文件,使我可以很好地組織登台,生產和本地站點的設置。

調用代碼中的settings = importlib.import_module(os.environ['DJANGO_SETTINGS_MODULE'])選擇了我的新靈活設置,就好像它們是很酷的舊模塊一樣,並且在大多數情況下都有效。

不幸的是,現在有很多舊的舊代碼,然后不停地調用“導入設置”,這失敗了。

我需要“導入設置”與“ import settings.production”或環境變量中指定的任何內容完全等效,以便支持舊版代碼,而不會失去靈活設置配置的好處。

注意:是的,這是我在一個很大的舊Django 1.3站點上工作,但是我相信我使這個問題獨立於Django。

寫下這個問題是徒勞的。 這是我的解決方案:

在設置模塊的__init__.py ,我輸入了:

import os
import importlib
try:
    # Do a dynamic 'from DJANGO_SETTINGS_MODULE import *'
    settings = importlib.import_module(os.environ['DJANGO_SETTINGS_MODULE'])
    for v in dir(settings):
        if v.startswith("__"): continue
        globals()[v] = getattr(settings, v)
except ImportError, KeyError:
    # default to the production settings if environment variable not set or improperly specified
    from production import *

這確實做了一些額外的工作,但是很好地解決了問題。 現在,我的舊程序將獲得所需的設置。

本質上,這使import settings == import settings.xxx ,其中settings.xxx在環境變量DJANGO_SETTINGS_MODULE中指定。

我希望其他人覺得這很有用。 請注意,只要您使用的應用程序正確導入了設置,DJANGO的較新版本就無需使用此技巧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM