python有时会在运行时重新导入模块吗?

python有时会在运行时重新导入模块吗?,python,import,garbage-collection,python-internals,Python,Import,Garbage Collection,Python Internals,我有一个用于研究的python代码库。代码库导入库,如numpy和pytorch,但也导入一些自定义工具(即我编写并希望使用的其他python包)。这些自定义软件包是使用pip install-e.安装到虚拟环境中的 我的工作流程是这样的,我将启动一个长时间运行的作业(一周左右),然后并行地继续修改或重构代码库。我越来越怀疑(偏执?)这些修改中的一些(不是全部)正在改变运行时行为 不幸的是,我无法将其孤立成一个具体的例子。相反,我觉得python正在用无法解释的结果来刺激我 python的垃圾收

我有一个用于研究的python代码库。代码库导入库,如
numpy
pytorch
,但也导入一些自定义工具(即我编写并希望使用的其他python包)。这些自定义软件包是使用
pip install-e.
安装到虚拟环境中的

我的工作流程是这样的,我将启动一个长时间运行的作业(一周左右),然后并行地继续修改或重构代码库。我越来越怀疑(偏执?)这些修改中的一些(不是全部)正在改变运行时行为

不幸的是,我无法将其孤立成一个具体的例子。相反,我觉得python正在用无法解释的结果来刺激我

python的垃圾收集器是否有什么功能,以及在重新加载某些模块的情况下使用可编辑安装?或者可能没有预先加载所有模块?

我在进行重大更改时明确看到了这种行为: 比如


我认为你的大胆声明已经有了答案

可能发生的情况是,您的可编辑标志“-e”可能会导致一些问题。但据我所知,这不应该发生在运行时。但是,如果在脚本中的某个地方重新启动python内核,则会导致问题


然后,解决方案是在脚本运行的虚拟环境中安装包时不使用-e标志(例如
python setup.py install
)。如果您不希望它隐式更新其运行的版本,则最好这样做。

您可以展开您的答案吗?什么类型的事情会导致python内核在运行时重新启动?不确定,可能有很多事情。例如,您的脚本生成了一组python进程,如果更新后生成了一个新进程,它将使用新版本。但是为什么您首先要在这个脚本的环境中使用-e呢?根据您的描述,我不确定正常的pip安装是否会有所帮助?假设我启动了实验1。然后对于实验2,我想测试
工具
(我想与exp1并行启动)中的一个新更改,我仍将被迫重新pip安装
工具
,将这些更改应用于环境如何分离这些环境?我想docker将是安全的选择
 - run "experiment" script
    - "experiment" script imports package 'tools'
 - While experiment script is running, update `tools` from v1.0 to v2.0
 - Assert checker in "experiment" script that checks 
   tools.__version__ == v1.0 causes code to crash