无法从Brownie导入MockV3Aggregator致合约部署失败求助
解决ImportError: cannot import name 'MockV3Aggregator' from 'brownie'
错误根源
MockV3Aggregator并非Brownie核心库自带组件,它属于你配置的chainlink-brownie-contracts依赖包,直接从brownie导入必然找不到该类。
修复步骤
1. 确认依赖包已正确安装
先执行以下命令,确保chainlink依赖包成功下载到本地:
brownie pm install smartcontractkit/chainlink-brownie-contracts@1.1.1
2. 修正导入语句
修改helpful_scripts.py中的导入代码,将原语句:
from brownie import network, config, accounts, MockV3Aggregator
替换为明确指向依赖包的导入路径:
from brownie import network, config, accounts from chainlink_brownie_contracts.contracts.test.mock_v3_aggregator import MockV3Aggregator
若依赖加载正常,也可使用更简洁的写法:
from brownie import network, config, accounts, MockV3Aggregator
注:如果简洁写法仍报错,优先使用明确路径的导入方式。
3. 修复get_account函数的两处逻辑错误
你的函数存在两个隐性bug,会导致后续功能异常:
- 参数为
Id,但判断时误用了Python内置函数id,导致按ID加载账户的逻辑失效; network.show_active未加括号调用,无法获取当前网络名称,本地网络下永远无法返回默认账户。
修正后的函数代码:
def get_account(index=None, Id=None): if index: return accounts[index] if Id: return accounts.load(Id) if ( network.show_active() in LOCAL_BLOCKCHAIN_ENVIRONMENTS or network.show_active() in FORKED_LOCAL_ENVIRONMENTS ): return accounts[0] return accounts.add(config["wallets"]["from_key"])
4. 重新部署合约
完成以上修改后,重新运行部署脚本即可解决导入错误。
内容的提问来源于stack exchange,提问作者Abiodun Abayomi-Jimoh
相关产品推荐
相关产品推荐

