Streamlit Cloud部署Google Cloud SQL Auth Proxy执行格式错误求助
解决Streamlit Cloud部署Cloud SQL Proxy执行格式错误问题
错误原因
你遇到的OSError: [Errno 8] Exec format error是因为上传到GitHub的cloud-sql-proxy是本地系统(比如Windows/macOS)编译的二进制文件,而Streamlit Cloud的运行环境是Linux x86_64架构,二进制文件架构不匹配导致无法执行。
解决方案
方案一:动态下载适配云端环境的Proxy
- 删除GitHub仓库里的本地
cloud-sql-proxy文件,避免环境冲突。 - 修改代码,在启动Proxy前自动下载Linux x86_64版本的Proxy并赋予执行权限:
def app(): st.set_page_config(page_title="Cabral Fitness Exercise Prescriptions") with st.spinner('Connecting to Cloud…Please Wait'): # 下载适配Linux环境的Cloud SQL Proxy subprocess.run([ 'curl', '-o', 'cloud-sql-proxy', 'https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.12.0/cloud-sql-proxy.linux.amd64' ]) # 赋予执行权限 subprocess.run(['chmod', '+x', 'cloud-sql-proxy']) # 启动Cloud SQL proxy proxy_process = subprocess.Popen( ['./cloud-sql-proxy', '--address', st.secrets.proxy_credentials.address, '--port', st.secrets.proxy_credentials.port, st.secrets.proxy_credentials.name]) time.sleep(5) conn = psycopg2.connect(**st.secrets.psycopg2_credentials)
方案二:使用官方Cloud SQL Python Connector(推荐)
这种方式无需手动管理Proxy进程,由官方库自动处理,更稳定且避免架构兼容问题:
- 在项目的
requirements.txt中添加依赖:
cloud-sql-python-connector[psycopg2]>=1.11.0 psycopg2-binary>=2.9.9
- 修改连接代码:
import streamlit as st from google.cloud.sql.connector import Connector, IPTypes import psycopg2 def app(): st.set_page_config(page_title="Cabral Fitness Exercise Prescriptions") with st.spinner('Connecting to Cloud…Please Wait'): # 初始化连接器 connector = Connector() # 定义连接函数 def getconn(): return connector.connect( st.secrets.proxy_credentials.name, # 你的Cloud SQL实例连接名 "psycopg2", user=st.secrets.psycopg2_credentials['user'], password=st.secrets.psycopg2_credentials['password'], db=st.secrets.psycopg2_credentials['dbname'], ip_type=IPTypes.PUBLIC # 若用VPC peering可改为IPTypes.PRIVATE ) # 获取数据库连接 conn = getconn()
- 在Streamlit Secrets中配置服务账号密钥:将你的Google Cloud服务账号JSON内容添加到
secrets.toml中,键名为GOOGLE_APPLICATION_CREDENTIALS,确保该服务账号拥有Cloud SQL Client权限。
内容的提问来源于stack exchange,提问作者JP1990
相关产品推荐
相关产品推荐

