我正在开发一个相对较大的 Python 应用程序,并且我希望将一些资源保留为可在多个不同模块中访问的全局变量。这些值包括版本号、版本日期、全局配置和一些资源的静态路径。我还包括了一个DEBUG
由命令行选项设置的标志,以便我可以在调试模式下运行我的应用程序,而不需要完整的环境。
我一直小心地确保我导入的值在程序运行过程中不会改变,并且我已将它们记录为不应触及的全局常量变量。我的代码基本上看起来像
# Main.py
import wx
from gui import Gui
DEBUG = False
GLOBAL_CONFIG = None
VERSION = '1.0'
ICON_PATH = 'some/path/to/the/app.ico'
def main():
global DEBUG, GLOBAL_CONFIG
# Simplified
import sys
DEBUG = '--debug' in sys.argv
GLOBAL_CONFIG = load_global_config()
# Other set-up for the application, e.g. setting up logging, configs, etc
app = wx.App()
gui = Gui()
app.MainLoop()
if __name__ == '__main__':
main()
# gui.py
import wx
from __main__ import DEBUG, GLOBAL_CONFIG, ICON_PATH
import controller
class Gui(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None)
icon = wx.Icon(ICON_PATH, wx.BITMAP_TYPE_ICO)
self.SetIcon(icon)
# Always make a copy so we don't accidentally modify it
conf = GLOBAL_CONFIG.copy()
self.controller = controller.Controller(conf)
# More setup, building the layout, etc
# controller.py
from __main__ import DEBUG
import logging
log = logging.getLogger('controller')
class Controller(object):
def __init__(self, conf):
if DEBUG:
log.info("Initializing controller in DEBUG mode")
self.conf = conf
# Other setup ...
这显然与我的应用程序的实际情况相去甚远,并且忽略了错误处理、文档和基本上所有的实现细节。
现在,我已经看到它说这是一个坏主意,但没有解释原因。由于在谷歌搜索“python import __main__”的变体时,大多数结果都是关于什么的问题if __name__ == '__main__'
是的,很难找到关于这个主题的一些可靠信息。到目前为止,我没有遇到任何问题,而且实际上非常方便。
那么这是否被认为是良好的 Python 实践,或者我是否有理由避免这种设计?