如何在烧瓶中重新加载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模块?的主要内容,如果未能解决你的问题,请参考以下文章