【问题标题】:Import statement: Config file Python导入语句:配置文件 Python
【发布时间】:2013-09-30 21:56:59
【问题描述】:

我正在维护一个字典,它被加载到配置文件中。字典是从 JSON 文件加载的。

在 config.py 中

name_dict = json.load(open(dict_file))

我正在使用其他几个脚本(file1.py、file2.py、...、filen.py)导入这个配置文件

import config

声明。我的问题是什么时候执行 config.py 脚本?我确信在我的多个脚本中进行的每个导入调用都不会执行它。但是,调用 import 语句时究竟会发生什么。

【问题讨论】:

    标签: python import configuration-files


    【解决方案1】:

    一个模块中的顶级代码执行一次,第一次你import它。之后会在sys.modules中找到module对象,不会重新执行代码重新生成。

    有几个例外:

    • reload,很明显。
    • 不小心以两个不同的名称导入同一个模块(例如,如果模块在一个包中,并且您在包的中间有一些目录 sys.path,那么您最终可能会得到 mypackage.mymodulemymodule 是同一事物的两个副本,在这种情况下代码会运行两次)。
    • 安装替换标准行为的导入挂钩/自定义导入。
    • 明确与sys.modules 胡闹。
    • 直接从imp/importlib等中调用函数。
    • multiprocessing 的某些情况(以及间接使用它的模块,例如 concurrent.futures)。

    对于 Python 3.1 及更高版本,这一切都在The import system 下进行了详细描述。特别是,查看搜索部分。 (针对该模块描述了multiprocessing 特定的情况。)

    对于早期版本的 Python,您几乎必须从各种不同的来源推断行为,并且要么阅读代码,要么进行试验。但是,有据可查的新行为旨在与旧行为一样工作,但具体描述方式除外,因此即使是 2.x,您通常也可以阅读 3.x 文档。


    请注意,一般而言,您不想依赖模块中的顶级代码是运行一次还是多次。例如,给定一个顶级函数定义,只要您从不比较函数对象,或重新绑定它(意味着定义本身,而不仅仅是主体)所依赖的任何全局变量,它就没有任何区别。但是,也有一些例外,加载启动时配置文件就是一个完美的例外示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 2022-10-13
      • 2023-02-15
      • 1970-01-01
      • 2019-04-25
      • 2016-06-05
      相关资源
      最近更新 更多