gpt4 book ai didi

python - 在导入模块 __init.py__ 之前设置变量

转载 作者:行者123 更新时间:2023-12-01 04:51:41 25 4
gpt4 key购买 nike

我的Python应用程序结构是这样的:

run.py
app/__init.py__
app/config.py
app/<other modules in app>

在我的 app/__init.py 中,我想检查变量 DEBUG_MODE 并根据其值启动 python Logger if DEBUG_MODE == False,如果为 True,则简单地打印到控制台。我当前尝试的(但不起作用)解决方案是拥有三个文件:

应用程序/config.py

DEBUG_MODE = False

应用程序/__init__.py

app = MyApp()
from config import DEBUG_MODE
app.debug = DEBUG_MODE
if not app.debug:
import logging
...

运行.py

from app import config
config.DEBUG_MODE = True
from app import app

问题当然是,当我的代码到达 config.DEBUG_MODE=True 时,app 模块的初始化代码已经被调用,因为我的配置文件是应用程序模块的一部分。

如何告诉模块我想要从 run.py 脚本中在运行时启用调试?

最佳答案

此问题的原因是 config.pyapp 模块和命名空间的一部分 - 对它及其变量的任何引用都需要 app/__init__ .py 首先被评估。

解决这个问题的一种方法是劫持Python __builtin__“模块”,它可用于所有Python模块,并添加我们自己的变量:

运行.py

import __builtin__
__builtin__.myapp_debug = True
from app import app

然后在模块__init__.py中:

# app is instantiated as an Object
import __builtin__
if hasattr(__builtin__, "myapp_debug"):
app.debug = __builtin__.myapp_debug
else:
app.debug = False
# If debugging is off, use file-based logging:
if not app.debug:
print "Setting up logging..."
import logging
...

关于python - 在导入模块 __init.py__ 之前设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28303876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com