将基于Streamlit的Python程序打包移植

将基于 Streamlit 的 Python 程序打包移植到其他设备或环境运行,主要依赖 环境隔离依赖管理。以下是 3 种常用方法及完整操作指南:


方法 1:PyInstaller 打包成独立可执行文件(推荐给终端用户)

步骤
  1. 安装打包工具:

    pip install pyinstaller patool
    
  2. 创建打包规范文件 test.spec(重要):

    # test.spec
    block_cipher = None
    
    a = Analysis(
        ['test.py'],  # 你的主程序文件
        pathex=['/your/project/path'],  # 项目路径
        binaries=[],
        datas=[('data/*', 'data')],  # 若有数据文件夹,手动添加资源路径
        hiddenimports=['streamlit'],  # 显式包含 Streamlit 依赖
        hookspath=[],
        hooksconfig={},
        runtime_hooks=[],
        excludes=[],
        optimize=0,
        cipher=block_cipher,
    )
    
    pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
    
    exe = EXE(
        pyz,
        a.scripts,
        a.binaries,
        a.zipfiles,
        a.datas,
        [],
        name='test',  # 生成的可执行文件名
        debug=False,
        bootloader_ignore_signals=False,
        strip=False,
        upx=True,      # 压缩可执行文件(需安装 upx)
        console=True   # 是否显示控制台窗口(True为显示)
    )
    
  3. 执行打包命令(自动处理依赖):

    pyinstaller --noconfirm test.spec
    
  4. 生成文件位置:

    dist/test/  # 包含可执行文件的完整运行环境
    
移植到其他设备
  • 将整个 dist/test 目录复制到目标设备,运行其中的 test.exe(Windows)或 test(Linux/macOS)即可(无需 Python 环境)。

方法 2:Docker 容器化(适合生产部署)

步骤
  1. 创建 Dockerfile

    # 基础镜像选择 Python 官方镜像
    FROM python:3.10-slim
    
    # 设置工作目录
    WORKDIR /app
    
    # 拷贝程序文件
    COPY . /app
    
    # 安装依赖(使用清华镜像加速)
    RUN pip install streamlit -i https://pypi.tuna.tsinghua.edu.cn/simple
    
    # 暴露 Streamlit 默认端口(8501)
    EXPOSE 8501
    
    # 启动命令
    CMD ["streamlit", "run", "test.py"]
    
  2. 构建镜像:

    docker build -t streamlit-test .
    
  3. 运行容器:

    docker run -p 8501:8501 streamlit-test
    
移植方法
  1. 导出镜像文件:

    docker save -o streamlit-test.tar streamlit-test
    
  2. streamlit-test.tar 复制到目标设备,加载并运行:

    docker load -i streamlit-test.tar
    docker run -p 8501:8501 streamlit-test
    

方法 3:打包虚拟环境(适合团队开发)

步骤
  1. 创建纯净虚拟环境:

    python -m venv myenv
    source myenv/bin/activate  # Linux/macOS
    myenv\Scripts\activate      # Windows
    
  2. 安装依赖到虚拟环境:

    pip install streamlit
    
  3. 使用 pip freeze 导出依赖清单:

    pip freeze > requirements.txt
    
  4. 打包整个项目(包含清单):

    tar -czvf project.tar.gz .   # Linux/macOS
    # 或用 Zip 打包(Windows右键压缩)
    
移植后操作
  1. 解压项目文件,创建新虚拟环境:

    python -m venv myenv_clone
    
  2. 根据 requirements.txt 安装依赖:

    pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
    
  3. 运行程序:

    streamlit run test.py
    

特殊情况处理

数据文件或模型丢失?
  • 确保在 PyInstaller 的 datas 或 Docker 的 COPY 中明确指出静态资源路径:
    # test.spec 示例添加数据文件夹
    datas=[('assets/*.png', 'assets'), ('model/*.pkl', 'model')]
    
兼容性问题?
  • 用 Docker 保证环境一致性:
    # 指定与开发环境一致的 Python 版本
    FROM python:3.9.13-slim
    

最终对比

方式 优点 缺点
PyInstaller 用户无需安装任何依赖 体积较大(约 150MB+)
Docker 环境隔离最彻底,适合跨平台生产部署 需目标设备安装 Docker 环境
虚拟环境 + 手动操作 轻量级,适合开发者共享 需要用户手动激活环境,依赖安装步骤
Streamlit Community Cloud 直接部署到云端 需上传代码至 Streamlit 服务器(数据隐私风险)

选择最符合您场景的方案即可(一般推荐 PyInstaller 或 Docker

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐