树莓派4下py-solc-x编译Solidity报solc未安装错误解决方案咨询
树莓派4下py-solc-x提示solc未安装的解决方法
问题复现
- 目标:将Solidity合约编译为可供Python调用的形式
- 已执行操作:在树莓派4设备运行
pip install py-solc-x安装依赖,安装输出显示py-solc-x 1.1.1及所有依赖包均已满足要求:
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Requirement already satisfied: py-solc-x in /home/talbot-raspberry/.local/lib/python3.9/site-packages (1.1.1) Requirement already satisfied: requests<3,>=2.19.0 in /usr/lib/python3/dist-packages (from py-solc-x) (2.25.1) Requirement already satisfied: semantic-version<3,>=2.8.1 in /home/talbot-raspberry/.local/lib/python3.9/site-packages (from py-solc-x) (2.10.0)
- 首次报错:运行部署脚本
python deploy.py执行编译逻辑时抛出异常,提示solc 0.6.0未安装:
Traceback (most recent call last): File "/home/talbot-raspberry/demos/web3_py_simple_storage/deploy.py", line 8, in compiled_sol = compile_standard( File "/home/talbot-raspberry/.local/lib/python3.9/site-packages/solcx/main.py", line 371, in compile_standard solc_binary = get_executable(solc_version) File "/home/talbot-raspberry/.local/lib/python3.9/site-packages/solcx/install.py", line 194, in get_executable raise SolcNotInstalled( solcx.exceptions.SolcNotInstalled: solc 0.6.0 has not been installed. Use solcx.install_solc('0.6.0') to install.
- 二次尝试:查找适配树莓派ARM架构的solc 0.6.0安装资源,参考社区操作指引手动安装对应资源后,再次运行脚本仍然抛出完全相同的报错。
排查与解决步骤
出现重复报错的核心原因是手动安装的solc二进制没有被py-solc-x的路径扫描逻辑识别,按以下步骤操作即可修复:
- 确认py-solc-x的solc二进制存储目录
运行如下Python命令获取默认扫描路径:
树莓派环境下该路径默认是from solcx import get_solc_install_folder print(get_solc_install_folder())/home/你的用户名/.solcx/。 - 规范放置solc二进制并配置权限
将手动下载/编译得到的solc 0.6.0二进制文件移动到上述目录,必须重命名为solc-v0.6.0(命名不符合规则会直接被扫描逻辑忽略),随后添加可执行权限:chmod +x ~/.solcx/solc-v0.6.0 - 校验二进制兼容性
直接运行二进制文件验证是否能在当前系统正常执行:
如果这一步提示执行格式错误、缺少依赖,说明下载的二进制和树莓派的系统版本、ARM架构版本不匹配,需要本地编译solc:~/.solcx/solc-v0.6.0 --version- 先安装编译依赖:
sudo apt update && sudo apt install -y build-essential libboost-all-dev cmake zlib1g-dev libjsoncpp-dev - 拉取solc 0.6.0版本源码完成编译,将编译生成的solc二进制按步骤2的要求放到指定目录、重命名、加权限即可。
- 先安装编译依赖:
- 代码中显式指定solc版本
在deploy.py的编译逻辑前添加如下代码,避免自动版本匹配出现识别偏差:from solcx import set_solc_version # 强制指定使用0.6.0版本的solc set_solc_version('0.6.0') # 后续原有的compile_standard编译逻辑保持不变 - 验证识别状态
运行如下代码确认py-solc-x已正确识别安装的solc版本:
输出结果中包含from solcx import get_installed_solc_versions print(get_installed_solc_versions())0.6.0即代表配置正常,此时再运行python deploy.py即可正常执行合约编译。
内容的提问来源于stack exchange,提问作者T3Crypto
相关产品推荐
相关产品推荐

