相关疑难解决方法(0)

阻止Python缓存导入的模块

在使用IPython在Python中开发一个大型项目(分成几个文件和文件夹)时,我遇到了缓存导入模块的麻烦.

问题是指令import module只读取模块一次,即使该模块已经改变!因此,每次我更改包中的内容时,都必须退出并重新启动IPython.痛苦.

有没有办法正确强制重装一些模块?或者,更好的是,以某种方式阻止Python缓存它们?

我尝试了几种方法,但都没有效果.特别是我遇到了非常非常奇怪的错误,就像一些模块或变量神秘地变得相等None......

我找到的唯一明智的资源是从pyunit 重新加载Python模块,但我没有检查它.我想要那样的东西.

一个很好的替代方案是让IPython重启,或以某种方式重启Python解释器.

那么,如果你用Python开发,你找到了什么解决方案来解决这个问题?

编辑

为了清楚起见:很明显,我理解一些旧的变量取决于模块的先前状态可能会存在.那个我能接受.为什么在Python中如此难以强制重新加载模块而不会发生各种奇怪的错误?

更具体地说,如果我将整个模块放在一个文件中,module.py那么以下工作正常:

import sys
try:
    del sys.modules['module']
except AttributeError:
    pass
import module

obj = module.my_class()
Run Code Online (Sandbox Code Playgroud)

这段代码很漂亮,我可以在不退出IPython的情况下开发数月.

但是,每当我的模块由多个子模块组成时,地狱就会松动:

import os
for mod in ['module.submod1', 'module.submod2']:
    try:
        del sys.module[mod]
    except AttributeError:
        pass
# sometimes this works, sometimes not. WHY?
Run Code Online (Sandbox Code Playgroud)

为什么我的模块在一个大文件或几个子模块中是如此不同?为什么这种方法不起作用?

python import python-module ipython python-import

48
推荐指数
5
解决办法
3万
查看次数

标签 统计

import ×1

ipython ×1

python ×1

python-import ×1

python-module ×1