python什么时候解析代码文件?

python什么时候解析代码文件?,python,python-3.x,python-module,Python,Python 3.x,Python Module,我目前正在一个中型项目中运行多参数配置的评估 我设置了某些参数,更改了一些代码部分,并用python运行了主文件 由于执行将需要几个小时,在启动它之后,我对一些文件进行更改(注释掉一些行并更改参数),然后在新的tmux会话中再次启动它 在执行此操作时,我观察到了行为,第一次执行将使用第二次执行的配置选项,因此python似乎没有解析代码文件,或者可能是延迟加载它们 因此,我想知道python如何加载模块/代码文件,以及在我开始执行后更改它们是否会对执行产生影响?python在导入文件时解析和编译

我目前正在一个中型项目中运行多参数配置的评估

我设置了某些参数,更改了一些代码部分,并用python运行了主文件

由于执行将需要几个小时,在启动它之后,我对一些文件进行更改(注释掉一些行并更改参数),然后在新的tmux会话中再次启动它

在执行此操作时,我观察到了行为,第一次执行将使用第二次执行的配置选项,因此python似乎没有解析代码文件,或者可能是延迟加载它们


因此,我想知道python如何加载模块/代码文件,以及在我开始执行后更改它们是否会对执行产生影响?

python在导入文件时解析和编译代码。一旦加载,它不会重新加载代码。因此,在执行第一行代码之前,主文件会进行导入,然后导入的文件会进行导入,然后再进行导入,等等。这意味着一旦执行导入后的第一条语句,我就可以“删除整个项目”,因为所有内容都已加载?除了显式重新加载或从代码中显式删除模块外,模块缓存是否在任何其他情况下失效?@MartijnPieters是正确的,但如果您有隐藏导入(动态导入)与使用
\uuuuu import\uuuuuu
一样,它可能会影响编译。@CarlAmbroselli:“模块缓存”是Python在执行模块代码(位于
sys.modules
中)的基础上构建的内存中数据结构。您可以删除这些(
del sys.modulename]
),这是一个显式无效。字节码(编译的结果,以及Python执行的内容)被缓存为
.pyc
文件(在Python 3中,在
\uuuu pycache\uuuu
子目录中)。@Mark:这只是推迟导入,它仍然是导入<代码>\uuuu import\uuuu被
import
语句用来完成这项工作。导入文件时,Python会解析和编译代码。一旦加载,它不会重新加载代码。因此,在执行第一行代码之前,主文件会进行导入,然后导入的文件会进行导入,然后再进行导入,等等。这意味着一旦执行导入后的第一条语句,我就可以“删除整个项目”,因为所有内容都已加载?除了显式重新加载或从代码中显式删除模块外,模块缓存是否在任何其他情况下失效?@MartijnPieters是正确的,但如果您有隐藏导入(动态导入)与使用
\uuuuu import\uuuuuu
一样,它可能会影响编译。@CarlAmbroselli:“模块缓存”是Python在执行模块代码(位于
sys.modules
中)的基础上构建的内存中数据结构。您可以删除这些(
del sys.modulename]
),这是一个显式无效。字节码(编译的结果,以及Python执行的内容)被缓存为
.pyc
文件(在Python 3中,在
\uuuu pycache\uuuu
子目录中)。@Mark:这只是推迟导入,它仍然是导入
\uuuu import\uuuu
import
语句用于执行工作。