You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solidity的install_solc()函数无限加载无法完成运行问题求助

问题根因

install_solc默认会从GitHub的Solidity发行页拉取对应版本的编译器二进制包,90%以上的无限加载问题都是由国内网络访问GitHub不稳定、DNS解析失败导致的下载请求无响应,此外也可能是本地缓存目录权限不足、已有版本冲突导致。

排查思路
  • 开启下载进度显示,确认是否为网络卡住:将install_solc("v0.7.0")替换为install_solc("v0.7.0", show_progress=True),运行后如果进度条长时间不动,即可确定是网络下载问题
  • 检查本地是否已存在对应版本solc:运行以下代码确认已安装的编译器版本,若已包含v0.7.0可直接跳过安装步骤
    from solcx import get_installed_solc_versions
    print(get_installed_solc_versions())
    
  • 检查缓存目录权限:py-solc-x默认会把下载的solc存在用户根目录下的.solcx文件夹内,确认该目录是否有当前用户的读写权限,权限不足会导致下载完成后写入卡住
解决方案
  1. 前置版本判断,避免重复安装
    将原来的安装代码替换为以下逻辑,已安装过对应版本就不会再触发下载:
from solcx import get_installed_solc_versions, install_solc

TARGET_SOLC_VERSION = "v0.7.0"
if TARGET_SOLC_VERSION not in get_installed_solc_versions():
    install_solc(TARGET_SOLC_VERSION, show_progress=True)
  1. 手动导入solc二进制包(无网络需求)
  • 自行获取对应操作系统的Solidity v0.7.0版本二进制可执行文件
  • 将文件重命名为solc-v0.7.0(Windows系统保留.exe后缀)
  • 把重命名后的文件放到用户根目录下的.solcx文件夹中,没有该文件夹可手动新建
  • 再次运行代码即可直接识别本地的solc版本,无需走下载流程
  1. 配置网络代理
    如果确定是网络问题,可在运行代码前给当前终端配置全局代理,或者在Python代码开头临时注入代理环境变量:
import os
# 替换为你本地的代理地址和端口
os.environ["HTTP_PROXY"] = "http://127.0.0.1:7890"
os.environ["HTTPS_PROXY"] = "http://127.0.0.1:7890"

# 后面接原有的install_solc等逻辑
  1. 权限问题修复
    如果是.solcx目录权限不足,可手动给该目录授予当前用户读写权限,或者指定自定义缓存目录:
from solcx import install_solc
import os
# 指定当前项目下的solc_cache文件夹为缓存目录,无需系统权限
custom_cache = os.path.join(os.getcwd(), "solc_cache")
os.makedirs(custom_cache, exist_ok=True)
install_solc("v0.7.0", solcx_home=custom_cache)

内容的提问来源于stack exchange,提问作者Yuki Yuminaga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:45:03