问题描述
我有一个用于研究的python代码库。代码库导入了numpy
和pytorch
之类的库,但也导入了一些自定义工具(即我编写并想要使用的其他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
)。如果您不希望它隐式更新运行它的版本,则最好这样做。