gpt4 book ai didi

Python - 将 Flask 应用程序的名称更改为 app.py 时出现 ModuleNotFoundError。可能的解决方案?

转载 作者:行者123 更新时间:2023-12-04 04:02:21 26 4
gpt4 key购买 nike

我最近将我的主 flask 应用程序文件从 inputServer.py 更改为 app.py 以提高易用性。

我的抛出错误的代码如下:

def readBackupPlayers(objectFile):
with open(objectFile, 'rb') as openedFile:
manager.playerList = pickle.load(openedFile)
print('Backup of players retrieved')

^读取用于备份存储在自定义对象中的列表的自定义 pickle 文件的函数

class PlayerManager:
def __init__(self):
self.playerList = []
self.ID = len(self.playerList) + 1
self.currentGame = None
self.tournament = None


manager = PlayerManager()

^声明该类并创建其实例以用于在整个程序中存储变量的代码。

错误信息:

File "c:\users\simon\appdata\local\programs\python\python38-32\lib\site-packages\flask\app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Users\simon\OneDrive\Documents\AtomTesting\app.py", line 356, in setup
readBackupPlayers('Backups/playerBackup')
File "C:\Users\simon\OneDrive\Documents\AtomTesting\app.py", line 72, in readBackupPlayers
manager.playerList = pickle.load(openedFile)
ModuleNotFoundError: No module named 'inputServer'

目录:

AtomTesting -
Backups -
playerBackup
tournamentBackup
Static -
static Flask files (not relevant)
templates -
Flask templates (not relevant)
app.py (renamed from inputServer.py)
config.py
README.md

最佳答案

这是正在发生的事情。 Python 的 pickle 模块根据名称序列化和反序列化(转储和加载)Python 对象。由于您的类所在的模块的名称发生了变化,Pickle 无法弄清楚如何重新实例化这些对象。

然而,有一个解决方案是 detailed on the Python wiki .它涉及将旧名称映射到新名称:

import pickle


renametable = {
'inputServer': 'app',
}

def mapname(name):
if name in renametable:
return renametable[name]
return name

def mapped_load_global(self):
module = mapname(self.readline()[:-1])
name = mapname(self.readline()[:-1])
klass = self.find_class(module, name)
self.append(klass)

def loads(str):
file = StringIO(str)
unpickler = pickle.Unpickler(file)
unpickler.dispatch[pickle.GLOBAL] = mapped_load_global
return unpickler.load()

或者,这可能是一种更好的方法,您不应该将 pickle 用于任何重要的数据存储,尤其是当您的应用程序版本之间可能使用某些东西时。

您可以考虑将 ORM 与轻型数据库(如 SQLite)结合使用。

关于Python - 将 Flask 应用程序的名称更改为 app.py 时出现 ModuleNotFoundError。可能的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62899116/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com