Windows 下部署 SUNA 项目:虚拟环境尝试与最终方案

article/2025/6/8 10:16:26

#工作记录

#回顾总结

本文记录了在 Windows 系统上,通过 PyCharm 图形界面(尽量减少命令行操作)部署 SUNA 项目时,针对不同虚拟环境方案的尝试过程、遇到的问题以及最终选择的可行方案,并补充了整体部署思路与推荐。文中步骤以“在 PyCharm 中用界面功能完成环境创建/删除、依赖安装”为前提。


一、背景与目标

  • 目标:让 SUNA 在 Windows 平台完整部署运行,尽量少用命令行,一切虚拟环境操作(创建/删除)都通过 PyCharm 的图形化界面完成。

  • 主要挑战

    1. 执行 python setup.py --admin 时,会自动在 C 盘创建一个新的 Poetry 虚拟环境,脱离项目目录,影响依赖管理。

    2. 前端需要编译 canvas(依赖 GTK/cairo),Windows 下缺少相关头文件和 DLL,往往编译失败。

    3. 不同 Python 主版本对后端依赖的兼容性差异显著:过高容易出现包安装失败,过低可能缺少新特性。


二、尝试过的虚拟环境方案

下面按照“Virtualenv(.venv)”和“Poetry”两大思路,依次列出所做尝试、遇到问题和结论。

1. Virtualenv(.venv)方案

通过 PyCharm 创建 .venv 虚拟环境,结合 Anaconda 提供的不同 Python 版本,再在该环境中安装 Poetry 并运行 setup.py --admin

1.1 基于 Anaconda 的 Python 3.13 + pip install poetry
  • 操作

    1. 在 PyCharm 中新建 .venv,选择 Anaconda Python 3.13。

    2. 通过界面或终端执行 pip install poetry

    3. 运行 python setup.py --admin

  • 问题

    • 脚本会在 C 盘 自动新建一个 Poetry 虚拟环境,与项目目录无法统一管理。

    • Python 3.13 版本过高,部分后端依赖(如一些深度学习或 C/C++ 扩展包)直接安装失败,导致部署卡住。

  • 结论:此组合下部署无法继续。

1.2 基于 Anaconda 的 Python 3.12 + pip install poetry
  • 操作

    1. PyCharm 新建 .venv,选择 Anaconda Python 3.12。

    2. 安装 Poetry:pip install poetry

    3. 运行 python setup.py --admin

  • 问题

    • 依旧会在 C 盘自动新建 Poetry 环境,脱离项目目录。

    • Python 3.12 版本虽然略低,但仍有部分后端包(依赖新版语法或系统扩展)安装失败,导致安装中断。

  • 结论:此组合下部署仍不能完成。

1.3 基于 Anaconda 的 Python 3.11 + pip install poetry
  • 操作

    1. PyCharm 创建 .venv,指定 Anaconda Python 3.11。

    2. 界面或终端执行 pip install poetry

    3. 运行 python setup.py --admin

  • 问题

    • 同样会在 C 盘新建 Poetry 环境,项目本地无法集中管理。

    • 虽然 Python 3.11 对后端依赖兼容性更好,但前端依赖 canvas 编译依赖 GTK 库,在 Windows 下依旧因为找不到 GTK 头文件/DLL 而报错,前端构建失败。

  • 结论:此方案下,后端依赖大部分可装,但前端依赖无法满足,部署中断。

Virtualenv 小结

  • 共性问题

    1. setup.py --admin 会在 C 盘新建一个 Poetry 环境,不在我们期望的项目目录内。

    2. Python 3.12/3.13 对部分后端包兼容性差,安装失败。

    3. Windows 下缺少 GTK 导致前端 canvas 无法编译。

  • 结论:使用 Virtualenv(.venv)拉起来的环境无法同时满足“Poetry 环境可控”与“前端 GTK 依赖”这两道关,故不可行。


2. Poetry 原生方案

在项目根目录利用 Poetry 手动创建虚拟环境,让 setup.py --admin 不再到 C 盘生成环境,所有东西都留在项目目录内。

2.1 基于 Anaconda 的 Python 3.12 + Poetry(项目目录 .venv)
  • 操作

    1. PyCharm → Interpreter → 选择 Anaconda Python 3.12。

    2. 在 PyCharm Terminal 中执行 pip install poetry

    3. 切换到项目根目录,执行 poetry init --no-interaction,生成 pyproject.toml

    4. 执行 poetry install,让 Poetry 在项目目录创建 .venv 并安装基础依赖。

    5. 运行 python setup.py --admin

  • 优点

    • setup.py --admin 不会再到 C 盘新建 Poetry 环境,所有虚拟环境都在项目目录可控范围。

  • 问题

    • Python 3.12 对部分后端依赖版本兼容性依旧有问题,一些包安装失败。

    • 前端依赖canvas 模块依赖 GTK 库,而 Windows 下并无 GTK 环境,依旧编译失败,前端卡住。

  • 结论:此方案对后端改进有限,前端依赖仍不可行。

2.2 基于 Anaconda 的 Python 3.11 + Poetry(项目目录 .venv)
  • 操作

    1. PyCharm → Interpreter → 选择 Anaconda Python 3.11。

    2. pip install poetrypoetry initpoetry install

    3. 运行 python setup.py --admin

  • 优点

    • 后端依赖大部分能正常安装,Python 3.11 对后端包兼容性显著改善。

    • Poetry 环境都在项目目录,不会再去 C 盘建。

  • 问题

    • 前端依赖依旧因 GTK 缺失canvas 无法编译,前端部署中断。

  • 结论:此方案只解决了“Poetry 环境可控”,但未解决“GTK 依赖”问题,前端依然挂掉。

2.3 MSYS2 MINGW64 + Python 3.12 + Poetry(项目目录 .venv)【最终可行方案】
  • 思路:在 MSYS2 MINGW64 环境里用自带的 Python 3.12 和 Poetry,借助 MSYS2 的 pacman 安装所有 GTK/cairo 依赖,彻底解决前端编译问题。

  • 操作步骤(简要)

    1. 安装 MSYS2 → 打开 MSYS2 MinGW 64-bit 终端。

    2. 更新基础包:

      pacman -Syu
      
    3. 安装 Python 3.12、pip、Poetry(如果 MSYS2 镜像已有,可直接 pacman 安装,否则用 pip):

      pacman -S mingw-w64-x86_64-python3 mingw-w64-x86_64-pip
      pacman -S mingw-w64-x86_64-python-poetry
      
    4. 在 PyCharm → Project Interpreter → 添加解释器,选择 C:\msys64\mingw64\bin\python.exe(MSYS2 Python 3.12)。

    5. 在项目目录(SUNA 根目录)执行:

      cd /c/路径/到/suna
      poetry init --no-interaction
      poetry install
      

      此时 Poetry 会在项目目录创建 .venv,并安装后端依赖(除 C/C++ 扩展外)。

    6. 安装前端所需的 GTK/cairo 相关包、Node.js、make、pkg-config

      pacman -S \mingw-w64-x86_64-toolchain \mingw-w64-x86_64-cairo \mingw-w64-x86_64-pango \mingw-w64-x86_64-gdk-pixbuf2 \mingw-w64-x86_64-libpng \mingw-w64-x86_64-freetype \mingw-w64-x86_64-fontconfig \mingw-w64-x86_64-nodejs \make \pkg-config
      
    7. 运行 python setup.py --admin

      • 不会再在 C 盘新建 Poetry 环境,所有后端依赖安装在项目目录。

      • 如果后端提示缺少 C/C++ 构建工具,可以通过 pacman -S mingw-w64-x86_64-toolchain make pkg-config 补齐。

    8. 构建前端:

      cd frontend
      export PKG_CONFIG_PATH=/mingw64/lib/pkgconfig
      export CFLAGS="-I/mingw64/include"
      export LDFLAGS="-L/mingw64/lib"
      npm install --build-from-source
      

      此时 canvas 模块可在 MINGW64 下顺利编译,前端构建成功

    9. 构建后端:

      poetry install

  • 优点

    1. Poetry 环境可控setup.py --admin 不再去 C 盘另外再创建环境,所有环境都在项目目录。

    2. 前端 GTK 依赖一并解决:利用 MSYS2 的 pacman 安装所需依赖,canvas 能编译通过。

    3. 后端依赖兼容:Python 3.12 对大部分后端包兼容性良好,结合 MSYS2 工具链可完成所有 C/C++ 扩展的构建。

  • 问题

    • 初期 MSYS2 中若缺少 mingw-w64-x86_64-toolchainmakepkg-config,会导致后端原生扩展(如某些 C/C++ 库)编译中断。

    • 需要对 MSYS2 包管理(路径、环境变量)有一定了解,配置过程相对繁琐。

  • 结论:在 Windows 平台下,如果要同时满足“Poetry 环境位置可控”和“前端 GTK/cairo 依赖”两大要求,MSYS2 MINGW64 + Python 3.12 + Poetry 是目前唯一可行方案,前后端都能顺利部署。

Poetry 小结

  • 方案 2.1/2.2:解决了 Poetry 环境在项目目录问题,但未解决前端 GTK 依赖,部署中断。

  • 方案 2.3(MSYS2):“一劳永逸”地通过 MSYS2 安装 GTK/cairo、Node.js、make、toolchain,最终前后端均能部署成功。


三、其他补充与部署思考

  1. 部署成功后仍有部分报错需要调试

    • 部分错误可能源自 SUNA 源码本身(逻辑或路径问题),也有很大几率是 Windows 平台差异导致。比如:

      • 文件权限、路径分隔符(\ vs /)引起小模块加载失败;

      • C/C++ 扩展在 Windows 下编译选项需微调;

      • 前端某些资源在 Windows 路径下找不到,报 EPERM 权限错误。

    • 因此,即便环境搭建成功,也需要一定量的手动调试和小范围代码修改。

  2. 最终部署优先级排序

    • 首推:Docker 部署

      • 只需安装 Docker Desktop,并在项目根目录编写好 Dockerfiledocker-compose.yml,然后一行命令 docker-compose up --build,即可在容器中完成前后端编译与运行,Windows 主机不必手动配置 GTK、Poetry、工具链等。

      • 优势:隔离性强、环境一致性高、可快速复现。

      • 缺点:需要学习 Dockerfile 写法、镜像体积较大、容器与宿主机文件挂载需特别注意权限。

    • 次推:WSL(Windows Subsystem for Linux)

      • 在 Windows 设置里开启 WSL(建议 Ubuntu 20.04/22.04),把所有前端/后端依赖安装到 Ubuntu 子系统里,部署过程基本与原生 Linux 一致。

      • 优势:Linux 原生环境,包管理简单,兼容性好。

      • 缺点:需要提前配置 WSL、网络与端口映射,文件系统读写性能与 Windows 主机有差异,需要适配。

    • 最后:MSYS2 MINGW64 + Python 3.12 + Poetry

      • 如果不愿意安装 Docker/WSL,也能通过 MSYS2 解决 GTK 和 Poetry 环境问题。

      • 优势:MSYS2 是 Windows 原生的类 Unix 环境,安装包便捷,但需对路径与环境变量处理细节有所掌握。

      • 缺点:配置复杂,需要手动补齐多种工具链,有一定折腾成本。

综合评价

  • Docker:部署体验最省心,一行命令搞定环境一致性,开发者只需维护 Docker 镜像。

  • WSL:保留 Linux 生态优势,适合对 Linux 环境熟悉的开发者;缺点在于 Windows ↔ WSL 文件互通时性能或权限需额外打磨。

  • MSYS2:适合习惯在 Windows 上使用类 Unix 工具链的开发者;但需要对 MSYS2 包管理、路径映射等有一定了解,偏“折腾派”。


四、文章结构与语言说明

  1. 文章结构

    • 第一部分:背景与目标
      简要说明为何要在 Windows 上部署 SUNA、主要挑战是什么。

    • 第二部分:尝试过的虚拟环境方案
      分为 “Virtualenv(.venv)方案” 和 “Poetry 方案” 两大类,逐条罗列不同 Python 版本/工具组合下的实际操作、遇到的问题与结论。

    • 第三部分:其他补充与部署思考
      包含部署成功后仍需调试之处、不同平台(Docker/WSL/MSYS2)优劣的策略排序和说明。

    • 第四部分:总结与推荐
      最终给出在 Windows 下首推、次推、最后选择三种方案的简明对比,帮助读者快速抉择。

  2. 语言组织

    • 保持“轻松严谨”风格:

      • 关键概念使用短句或分项列表强调,保证信息一目了然。

      • 遇到的问题与解决思路分别列出“操作”“问题”“结论”三要素,让读者迅速抓住要点。

      • 结论处对比各方案优缺点,方便读者根据自身需求快速做选择。

    • 使用“简洁词汇 + 适当小结”方式:

      • 每个小节后都做简短概括,便于从头浏览或查阅。

      • 衔接处使用“然而”、“但是”、“同时”等对比词,提示不同方案的优劣差异。

    • 强调“可复制/可复现”:

      • 在最终总结处给出一行部署思路,供读者快速复现或保存在 README 里。

      • 对于关键命令,直接以三重反引号标注,保证可复制粘贴。


五、总结

  • Virtualenv(.venv)方案:存在“Poetry 环境脱离项目目录”与“Windows 下 GTK 依赖缺失”两大问题,无法完成部署。

  • Poetry 原生方案

    • Python 3.12/3.11 + Poetry(项目目录):只解决了环境位置可控,但依旧因 GTK 缺失或后端包兼容问题导致部署失败。

    • MSYS2 MINGW64 + Python 3.12 + Poetry:利用 MSYS2 的 pacman 安装 GTK/cairo、Node.js、make、工具链,最终前后端部署都成功,是目前唯一可行方案

  • 部署优先级

    1. Docker 部署(一键容器化)——最省心;

      #项目根目录下运行
      docker compose down && docker compose up --build

    2. WSL Ubuntu 部署——Linux 生态优势;

    3. MSYS2 MINGW64 + Python 3.12 + Poetry——原生 Windows 方案,需要一定折腾精神。

  • 后续建议

    • 若有机会改进 SUNA 源码,可尝试降低前端对 GTK 的依赖,或提供预编译二进制版本,减轻 Windows 环境编译负担。

    • 将上述部署步骤整理到项目 README 或内网文档,减少团队成员重复踩坑。

本文旨在帮助读者快速了解——在 Windows 平台上部署 SUNA 项目时,不同虚拟环境方案的得失与选择思路,以及如何结合 MSYS2 或其他平台(Docker/WSL)完成最终部署。希望能为今后参考与复现提供清晰思路。

回顾记录未尽之处还请见谅。


http://www.hkcw.cn/article/wQHROmrqFw.shtml

相关文章

Mycat的监控

参考资料: 参考视频 参考博客 Mysql分库分表(基于Mycat)的基本部署 MySQL垂直分库(基于MyCat) Mysql水平分表(基于Mycat)及常用分片规则 视频参考资料及安装包: https://pan.b…

安科电动机保护器通过ModbusRTU转profinet网关与PLC通讯

安科电动机保护器通过ModbusRTU转profinet网关与PLC通讯 在工业自动化领域,设备间的通信和数据交互至关重要。Modbus作为一种常用的通讯协议,广泛应用于各种工业现场;而Profinet则凭借其高效、实时性,在工业以太网通讯中占据重要…

CLion社区免费后,使用CLion开发STM32相关工具资源汇总与入门教程

Clion下载与配置 Clion推出社区免费,就是需要注册一个账号使用,大家就不用去找破解版版本了,jetbrains家的IDEA用过的都说好,这里嵌入式领域也推荐使用。 CLion官网下载地址 安装没有什么特别,下一步就好。 启动登录…

【快见刊】2025年应用材料、机械与制造工程国际会议(ICAMMME 2025)

2025年应用材料、机械与制造工程国际会议(MMME 2025)将在美丽的六朝古都南京隆重召开。南京,这座兼具现代都市风貌与深厚历史文化底蕴的城市,将以其独特的魅力迎接来自世界各地的应用材料、机械与制造工程领域的专家、学者及业界精…

TopCode之最大子数组和

题目链接 53. 最大子数组和 - 力扣(LeetCode) 题目解析 算法原理 解法1: 暴力(一个循环用来固定,一个用来找最大的子数组O(n^2),每次往后拓展一个元素就判断是否是最长的),枚举出每一种情况, 然后不断更新最大的 解法二: dp 1> dp的含义: dp[i]记…

SAP是什么?SAP概述

SAP 概述 一、核心定义 ‌SAP‌(Systems, Applications & Products in Data Processing)是德国 SAP 公司开发的集成化 ‌ERP(企业资源规划)‌ 系统,通过模块化架构整合企业财务、供应链、生产等核心业务流程&…

Fooocus 一款好用的文生图软件,4G显存可跑

Fooocus 是一款对标**Midjourney**的图像生成软件,并且可以本地部署,目前star数量已经来到了45.2k,说明非常受大家欢迎的。 今天我们来体验下。 首先贴上git地址 https://github.com/lllyasviel/Fooocus 看下软件对硬件的要求 针对不同的显…

【AI Study】第三天,Python基础 - NumPy(1)

学习计划:AI Study,学习计划源码地址:https://github.com/co-n00b/AI-Study.git 2025-05-23 一、NumPy简介 NumPy的官方文档并没有明确指出其发音,但根据英语单词的常规发音规则NumPy可以读作/ˈnʌmpaɪ/,也可以读作/ˈnʌmpi/…

电工基础【4】点动接线实操

06 接线实操 (接线实操) 1、接线实操软件下载和安装 2、点动点路图接线实操 3、接线的基本工艺和基本工具 -----小记----- 斯沃数控机床仿真(SSCNC Machine Simulation 软件)示例图 斯沃数控机床仿真软件(电气) v1.3 安装版(附安装教程) https://www.jb51.net/softs/776239.…

QT 5.9.2+VTK8.0实现等高线绘制

项目下载链接:QT5.9.2VTK8.0实现等高线绘制资源-CSDN文库 示例如下: 主要代码如下: #include "vtkRenderer.h" #include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" #include "vtkPo…

【C++】特殊类设计

1.设计一个不能被拷贝的类 C98中: 将拷贝构造函数和赋值运算符重载只声明不定义,将访问权限设置私有 原因: 设置成私有:如果只声明没有设置成private,用户自己如果在类外定义了,就可以不能禁止拷贝了只声…

Oracle 用户/权限/角色管理

1. 用户 1.1. 用户的创建和删除 1.1.1. 创建用户 create user user identified {by password | externally} [ default tablespace tablespace ] [ temporary tablespace tablespace ] [ quota {integer [k | m ] | unlimited } on tablespace [ quota {integer [k | m ] | …

机器人现可完全破解验证码:未来安全技术何去何从?

引言 随着计算机视觉技术的飞速发展,机器学习模型现已能够100%可靠地解决Google的视觉reCAPTCHAv2验证码。这标志着一个时代的结束——自2000年代初以来,CAPTCHA("全自动区分计算机与人类的图灵测试"的缩写)一直是区分…

AI赋能SEO关键词革新

内容概要 随着人工智能技术与搜索引擎优化的深度融合,传统关键词策略正经历系统性变革。基于智能语义分析与深度学习算法,AI能够实时解析海量搜索数据,构建动态更新的关键词库,突破人工筛选的局限性。通过自然语言处理技术&#…

深入解析Java11核心新特性

文章目录 前言一、标准化HTTP Client:告别HttpURLConnection1.1 HttpURLConnection 的痛点1.2 标准化 HTTP Client 的解决方案1.3 实战应用指南1.4 总结 二、局部变量类型推断增强:Lambda中的var2.1 解决的问题:类型声明的一致性困境2.2 实现…

香橙派3B学习笔记6:基本的Bash脚本学习_UTF-8格式问题

今日学习基本的linux 的一些 bash 脚本 ssh : orangepi本地ip 密码 : orangepi 操作系统发行版: 基于 Ubuntu 20.04.6 LTS(Focal Fossa)的定制版本,专门为 Orange Pi 设备优化。PRETTY_NAME"Orange P…

腾讯下乡了。。。

大家好,我是苍何。 这两天在网上出现很多腾讯元宝在乡下的横幅,着实把我吓了一大跳。 甚至养猪问题也可以直接问元宝🐶 前两天,刚好回乡下给我儿子过 2 岁生日,家里大婶的弟弟就是专业的养猪大户,在吃饭的…

如何在PowerBI中使用Analyze in Excel

如何在PowerBI中使用Analyze in Excel 之前分享过如何使用DAXStudio将PowerBI与Excel连接 ,今天介绍另外一个工具,也可以实现同样的功能,Analyze in Excel。 使用Analyze in Excel 第一步: 首先准备好一个PBIX文件&#xff0c…

接口测试的用例设计

1.简介 在这篇文章里,我们来学习一下接口测试用例设计,主要是来学习一些用例设计要点。其实说白了,接口用例设计和功能用例设计差不多,照猫画虎即可。不要把它想象的多么高大上,多么的难,其实一样&#xff…

AI“实体化”革命:具身智能如何重构体育、工业与未来生活

近年来,人工智能(AI)技术的飞速发展正在重塑各行各业,而具身智能(Embodied AI)作为AI领域的重要分支,正逐渐从实验室走向现实应用。具身智能的核心在于让AI系统具备物理实体,能够与环…