Import语句:配置文件Python

时间:2013-09-30 21:56:59

标签: python import configuration-files

我正在维护一个字典,并在配置文件中加载。字典从JSON文件加载。

在config.py

name_dict = json.load(open(dict_file))

我正在使用

在其他几个脚本(file1.py,file2.py,...,filen.py)中导入此配置文件
import config

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

1 个答案:

答案 0 :(得分:2)

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

有一些例外:

    显然是
  • reload
  • 意外地以两个不同的名称导入相同的模块(例如,如果模块在一个包中,并且您在sys.path的包中间有一些目录,那么最终可能会mypackage.mymodule 1}}和mymodule是同一个东西的两个副本,在这种情况下代码会运行两次)。
  • 安装导入钩子/自定义导入以替换标准行为。
  • 明确地使用sys.modules进行编辑。
  • 直接调用imp / importlib之类的功能。
  • multiprocessing的某些案例(以及间接使用它的模块,如concurrent.futures)。

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

对于早期版本的Python,您几乎必须从各种不同的来源推断行为,并阅读代码或进行实验。但是,记录良好的新行为旨在像旧的行为一样工作,除非有明确描述的方式,因此即使对于2.x,您通常也可以阅读3.x文档。


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