如何在烧瓶中重新加载python模块?

Posted

技术标签:

【中文标题】如何在烧瓶中重新加载python模块?【英文标题】:How to reload python module in flask? 【发布时间】:2017-07-25 18:07:24 【问题描述】:

我有一个名为mapping.py 的文件,其中有一个字典methodMapping。在我的 Web 应用程序中,一个键值对被添加到 methodMapping 字典中。在我将它附加到mapping.py 之后,reload(mapping) 被调用,文件重新加载(我通过在文件顶部打印出一条消息来检查),但是当我尝试访问键值对时,KeyError 是提出来。

原始mapping.py文件:

print('mapping.py loaded) methodMapping =   
methodMapping['key1'] = 'value1'

以下是键值对附加到文件的方式:

from mapping import methodMapping
@app.route('/append', methods=['POST'])
def append():

    key = request.form.get('key')
    value = request.form.get('value')

    value = value.encode('ascii', 'ignore')

    f = open('mapping.py', 'a')
    f.write('methodMapping["'+key+'"] = '+value)
    f.write("\n\n")
    f.close()

    reload(mapping)
    return ....

添加键值后,mapping.py 如下所示:

print('mapping.py loaded') 
methodMapping =   
methodMapping['key1'] = 'value1'
methodMapping['key2'] = 'value2'

但是,当我尝试从 flaskServer.py 访问 methodMapping['key2'] 时,会引发 KeyError 异常。当我重新启动服务器时,它能够找到methodMapping['key2']

注意:我已经检查过这个link,也尝试过app.run(debug=True, port=8000),但这对我的应用程序来说是不可能的,因为我使用的是带有 Tensorflow 后端的 keras,并且设置 debug=True 将加载它两次并导致ValueError: Tensor tensor(...) is not part of the graph错误

非常感谢任何评论或建议。谢谢。

【问题讨论】:

我找到了解决方案:问题出在我导入映射的方式上。如果我想让reload(mapping) 工作,我需要使用import mapping 而不是from mapping import ... 【参考方案1】:

问题在于您导入映射的方式。如果你想让reload(mapping) 工作,你需要使用import mapping 而不是from mapping import...

如果你找到答案,你应该把它放在一个答案而不是评论中。 ;)

【讨论】:

谢谢你的评论 - 我会检查你的答案然后:) 另外,我还有另一个问题是在 reload() 之后,我无法使用 pickle,因为根据这个***.com/questions/1412787/… 它需要采用from mapping import... 的形式才能让pickle 工作。你可能知道答案吗? 根据该答案,您只需每次都以相同的方式导入内容,而不是特定的方式。

以上是关于如何在烧瓶中重新加载python模块?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中重新加载模块的函数?

如何在 IDLE 中重新加载 Python 模块?

脚本编译后如何在python中重新加载模块?

在python中重新加载模块

在 Python 3.4 中重新加载模块 [重复]

如何重新加载 Python3 C 扩展模块?