RenPy无法识别自定义Python函数generate_text问题求助
核心排查方向
generate_text未定义的本质是RenPy未加载到该函数,结合transformers库的特性,从以下几个关键维度修复:
1. 规范Python代码存放位置
RenPy仅自动加载两类Python代码:
- 项目
game/python/目录下的.py文件 .rpy脚本中用init python:块包裹的代码
如果你的函数写在普通.rpy的非init块里,或者放在了错误文件夹,启动时不会被加载,运行必然报NameError。
2. 调整init执行优先级
transformers库加载需要时间,默认init python:的优先级为0,可能早于库加载完成。给函数所在的init块指定更高优先级(数值越大执行越晚):
init python 10: from transformers import pipeline def generate_text(prompt): generator = pipeline("text-generation", model="gpt2") result = generator(prompt, max_length=50)[0]['generated_text'] return result
3. 确保transformers库安装到RenPy环境
RenPy有独立Python环境,系统pip安装的库无法被识别,必须用RenPy自带的pip安装:
# Windows RenPy安装目录/renpy/python.exe -m pip install transformers # Linux/macOS ./RenPy安装目录/renpy/python/bin/python -m pip install transformers
4. 规范函数调用时机
禁止在label外直接调用函数,此时init阶段可能未完成。必须在label内部调用:
label start: $ generated_content = generate_text("你好,RenPy!") "生成结果:[generated_content]" return
报错日志验证示例
若你的报错日志如下:
I'm sorry, but an uncaught exception occurred.
While running game code:
File "game/script.rpy", line 5, in script
$ result = generate_text("Test prompt")
NameError: name 'generate_text' is not defined-- Full Traceback ------------------------------------------------------------
Full traceback:
File "script.rpyc", line 5, in script_call
File "renpy/ast.py", line 922, in execute
renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store)
File "renpy/python.py", line 2218, in py_exec_bytecode
exec(bytecode, globals, locals)
File "game/script.rpy", line 5, in
NameError: name 'generate_text' is not defined
按上述步骤依次排查:先确认函数是否在init python块中,再检查优先级和库安装状态。
额外优化提示
- 不要在
init块中直接创建transformers的pipeline实例,会拖慢启动速度,建议在函数内部动态创建,或在游戏首个label中初始化。 - 传递给函数的变量需为Python原生类型(字符串、数字等),避免传入RenPy特有对象。
内容的提问来源于stack exchange,提问作者的場詩音

