使用“import”main是个好习惯吗?

2024-06-08 03:44:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个相对较大的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 ...

这显然与我的应用程序的实际情况相差甚远,忽略了错误处理、文档以及基本上所有实现细节。

现在,我已经seen it said这是一个坏主意,但没有解释原因。因为在搜索“python import”的变体时,大多数结果都是关于什么是if __name__ == '__main__'的问题,所以很难找到关于这个主题的可靠信息。到目前为止我对它没有任何问题,而且它确实非常方便。

这被认为是良好的Python实践,还是有理由避免这种设计?


Tags: frompydebugimportselfconfig应用程序main
1条回答
网友
1楼 · 发布于 2024-06-08 03:44:17

这样做需要违反PEP8,它指定

Imports are always put at the top of the file, just after any module comments and docstrings, and before module globals and constants.

为了使gui.py成功导入__main__.DEBUG,您必须在^{import gui之前设置DEBUG的值。

相关问题 更多 >

    热门问题