我使用的是https://github.com/ekonda/kutana。
plugins/test.py:
from kutana import Plugin
import pickle
plugin = Plugin(name="Tictactoe",
description="Tictactoe Game",
invites={},
games=[])
@plugin.on_start()
async def _():
plugin.games = [Game()]
# Backup games when bot is shutting down
@plugin.on_shutdown()
async def _():
try:
with open("games.pickle", "wb") as f:
pickle.dump(plugin.games, f)
except Exception as e:
print(e)
class Game:
def __init__(self):
pass
run.py:
from kutana import Kutana, load_plugins
# Create application
app = Kutana()
# Load and register plugins
app.add_plugins(load_plugins("plugins/"))
if __name__ == "__main__":
# Run application
app.run()
当plugin.games
为空时,pickle
转储时没有错误,但是如果我在这里放置class Game
的任何已创建对象,则在尝试备份时会出现错误:
Traceback (most recent call last):
File "C:\Users\root\Desktop\Celestiana\plugins\games\tictactoe.py", line 17, in _
pickle.dump(pl.games, f)
_pickle.PicklingError: Can't pickle <class 'plugins/games\tictactoe.py.Game'>: import of module 'plugins/games\\tictactoe.py' failed
我该如何修复它?我尝试做一些类似pickle.dump(plugin.games, f, fix_imports=True)
的事情,但它不起作用。
重现此错误的示例项目:https://github.com/daeeros/example
2条答案
按热度按时间46scxncf1#
修复直接导入Python源文件的方式。
1.在
load_plugins_from_file
中,指定正确的名称。1.在定制的
import_module
中,将模块插入sys.modules
,如食谱www.example.com所示https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly。00jrzges2#
试试看