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

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

  1. 删除GitHub仓库里的本地cloud-sql-proxy文件,避免环境冲突。
  2. 修改代码,在启动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进程,由官方库自动处理,更稳定且避免架构兼容问题:

  1. 在项目的requirements.txt中添加依赖:
cloud-sql-python-connector[psycopg2]>=1.11.0
psycopg2-binary>=2.9.9
  1. 修改连接代码:
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()
  1. 在Streamlit Secrets中配置服务账号密钥:将你的Google Cloud服务账号JSON内容添加到secrets.toml中,键名为GOOGLE_APPLICATION_CREDENTIALS,确保该服务账号拥有Cloud SQL Client权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:27:42