Flask集成Brownie时报无法导入SimpleCollectible错误如何解决
错误原因与解决方案
你遇到的报错核心是SimpleCollectible是你本地编写的自定义合约,不属于Brownie官方内置模块,直接执行from brownie import SimpleCollectible时,Brownie没有加载当前项目的合约信息,因此无法识别导入内容。
步骤1:确认Brownie项目结构合规
- 你的
SimpleCollectible.sol合约文件必须存放在Brownie项目根目录下的contracts/文件夹中 - 你已在Brownie项目根目录执行过
brownie compile完成合约编译,build/contracts/SimpleCollectible.json文件已正常生成
步骤2:修正代码与运行方式
方案A:调整启动命令(更推荐)
不要直接使用flask run启动服务,改为在Brownie项目根目录下,通过brownie指令加载项目上下文后启动Flask:
- 在项目根目录新建启动脚本
run_server.py,内容示例:
from app.api.api import app if __name__ == "__main__": app.run(host="0.0.0.0", port=5000, debug=True)
- 执行启动命令:
brownie run run_server.py
方案B:代码内手动加载项目上下文
如果需要保留原有启动方式,在create_collectible.py文件的最开头,先加载Brownie项目:
from brownie.project import load_project import os # 替换为你本地Brownie项目的根目录绝对路径 BROWNIE_PROJECT_ROOT = "/Users/work/Documents/OpenvinoNFT/" load_project(BROWNIE_PROJECT_ROOT) # 注意这里是accounts复数,不是account,原代码的单数写法也会触发导入错误 from brownie import SimpleCollectible, accounts, network, config
步骤3:验证修复
修改完成后重新启动服务,导入报错即可解决。
内容的提问来源于stack exchange,提问作者Fran ETH
相关产品推荐
相关产品推荐

