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

问题描述

我有一个用于研究的python代码库。代码库导入了numpypytorch之类的库,但也导入了一些自定义工具(即我编写并想要使用的其他python包)。这些自定义程序包是使用pip install -e .安装到虚拟环境中的。

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

不幸的是,我无法将其隔离为一个具体示例。相反,我觉得python正在用无法解释的结果吸引我。

Python的垃圾收集器是否存在某些功能,并且可以重新安装某些模块的可编辑安装?还是不是所有模块都没有预先加载?

在进行大的更改时,我已经明确看到此行为: 如

 - 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

解决方法

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

可能正在发生的事情是您的可编辑标志“ -e”可能会引起一些问题。但是据我了解,这不应在运行时发生。但是,如果在脚本的某个位置重新启动python内核,则会导致问题。

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