Windows 下部署 SUNA 項目:虛擬環境嘗試與最終方案

#工作記錄

#回顧總結

本文記錄了在 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.pswp.cn/diannao/85591.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85591.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85591.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

無向圖的點、邊雙連通分量

文章目錄 點雙連通分量邊雙連通分量 有向圖的強連通分量:寒假學習筆記【匠心制作,圖文并茂】——1.20拓撲、強連通分量、縮點 點雙連通分量 在這之前,先讓我們了解幾個概念。 割點:刪除一個點和其連出的邊后,原圖會…

第六十二節:深度學習-加載 TensorFlow/PyTorch/Caffe 模型

在計算機視覺領域,OpenCV的DNN(深度神經網絡)模塊正逐漸成為輕量級模型部署的利器。本文將深入探討如何利用OpenCV加載和運行三大主流框架(TensorFlow、PyTorch、Caffe)訓練的模型,并提供完整的代碼實現和優化技巧。 一、OpenCV DNN模塊的核心優勢 OpenCV的DNN模塊自3.3…

Spring @Autowired自動裝配的實現機制

Spring Autowired自動裝配的實現機制 Autowired 注解實現原理詳解一、Autowired 注解定義二、Qualifier 注解輔助指定 Bean 名稱三、BeanFactory:按類型獲取 Bean四、注入邏輯實現五、小結 源碼見:mini-spring Autowired 注解實現原理詳解 Autowired 的…

勝牌?全球成為2026年FIFA世界杯?官方贊助商

勝牌全球將首次與國際足聯(FIFA)旗艦賽事建立合作關系。 此次贊助恰逢美國首個潤滑油品牌即將迎來160周年之際,其國際擴張步伐正在加快。 在這項全球頂級賽事籌備期間,勝牌全球將通過各種富有創意的零售和體驗活動與球迷互動。 …

YOLOV7改進之融合深淺下采樣模塊(DSD Module)和輕量特征融合模塊(LFI Module)

目錄 一、研究背景? 二. 核心創新點? ?2.1 避免高MAC操作? ?2.2 DSDM-LFIM主干網絡? 2.3 P2小目標檢測分支? ?3. 代碼復現指南? 環境配置 關鍵修改點 ?4. 實驗結果對比? 4.1 VisDrone數據集性能 4.2 邊緣設備部署 4.3 檢測效果可視化 ?5. 應用場景? …

【C/C++】chrono簡單使用場景

chrono使用場景舉例 1 輸出格式化字符串 示例代碼 auto now std::chrono::system_clock::now(); auto t std::chrono::system_clock::to_time_t(now); auto ms std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()) % 1000;std::ostrin…

Med-R1論文閱讀理解-1

論文總結&#xff1a;Med-R1: Reinforcement Learning for Generalizable Medical Reasoning in Vision-Language Models 論文寫了什么&#xff1f; 本文提出了一種名為 Med-R1 的新框架&#xff0c;旨在通過強化學習&#xff08;Reinforcement Learning, RL&#xff09;提升…

京東熱點緩存探測系統JDhotkey架構剖析

熱點探測使用場景 MySQL 中被頻繁訪問的數據 &#xff0c;如熱門商品的主鍵 IdRedis 緩存中被密集訪問的 Key&#xff0c;如熱門商品的詳情需要 get goods$Id惡意攻擊或機器人爬蟲的請求信息&#xff0c;如特定標識的 userId、機器 IP頻繁被訪問的接口地址&#xff0c;如獲取用…

MCU_IO驅動LED

注意事項&#xff1a; 1、亮度要求較高的情況下&#xff0c;不能由IO直接驅動LED MCU_IO引腳輸出的電壓和電流較弱&#xff0c;如果對光的亮度有要求的話&#xff0c;需要使用三極管來驅動。 MCU_IO的電壓一般為3.3V或者5V&#xff0c;輸出電流一般10mA-25mA。 2、不同顏色…

MyBatis 深度解析:高效 Java 持久層框架實踐指南(基于 3.5.10)

一、MyBatis 核心架構與設計哲學 MyBatis 作為半自動 ORM 框架&#xff0c;核心設計目標是在靈活性與開發效率之間取得平衡。與 Hibernate 等全自動 ORM 框架不同&#xff0c;MyBatis 允許開發者完全控制 SQL 編寫&#xff0c;同時通過映射機制減少重復代碼&#xff0c;特別適…

二叉樹(二)

98.驗證二叉樹 中序遍歷二叉樹&#xff0c;每次遍歷存下當前節點的值&#xff0c;遍歷到下一個節點比較&#xff0c;根據二叉搜索樹的特性&#xff0c;左<中<右有&#xff1a; 如果當前值小于或等于上一個的值&#xff0c;說明不是二叉搜索樹 如果當前值大于上一個節點…

解決Vue3+uni-app導航欄高亮自動同步方案

路由跳轉自動識別導航高亮實現方法 以下代碼使用wd-tabbar組件實現路由跳轉時自動同步導航欄高亮狀態&#xff0c;適用于所有的Vue3uni-app項目。 請根據自身使用框架類型完成&#xff0c;也可根據我使用的UI組件進行完成地址如下&#xff1a; Tabbar 標簽欄 | Wot UI &#…

免費論文查重與AI檢測工具推薦

文章目錄 概要一、PaperPass二、PaperYY注意 概要 畢業季&#xff0c;總少不了查重這一步&#xff0c;甚至查 AI 率。推薦兩款免費查重AIGC檢測的工具。 論文免費查重查AI&#xff1a; https://paperpass.com/ https://www.paperyy.com/ 一、PaperPass 網址&#xff1a; ht…

4、ubuntu系統 | 文本和目錄操作函數

1、目錄操作函數 ls(列出目錄內容) 用途:列出指定目錄中的文件和子目錄。語法:ls [選項] [路徑]常用選項: -l:以長格式顯示文件詳細信息(權限、所有者、大小、時間等)。-a:顯示隱藏文件(以.開頭的文件)。-R:遞歸列出子目錄內容。# 列出當前目錄下的所有文件和子目…

C++--范圍for循環詳解

范圍 for 循環是 C11 引入的語法特性&#xff0c;用于簡化遍歷容器或數組元素的過程。它比傳統 for 循環更簡潔安全&#xff0c;特別適合初學者。以下是詳細講解&#xff1a; 基本語法 for (元素類型 變量名 : 容器/數組) {// 循環體&#xff08;使用變量名訪問當前元素&#…

RDMA簡介1之RDMA開發必要性

為了滿足大批量數據的采集、存儲與傳輸需求&#xff0c;越來越多的數據密集型應用如機器學習、雷達、金融風控、航空航天等選擇使用現場可編程邏輯門陣列作為數據采集前端硬件來實現高性能的數據采集系統。FPGA憑借其高靈活性、高并行能力及可高度定制化的特點&#xff0c;能夠…

xmake的簡易學習

文章目錄 1. xmake是什么2. 一個可執行程序3. 一個庫文件4. 遍歷文件用法5. 第三方庫3.1 系統安裝庫3.2 獨立庫 6. 后續 由于前一篇博客的最后說要做一些rknn的優化&#xff0c;其實這個工作很早就完成了&#xff0c;但是我是使用 xmake這個來做我的工程的構建的&#xff0c;不…

【ArcGIS微課1000例】0147:Geographic Imager6.2下載安裝教程

文章目錄 一、軟件功能二、下載地址三、安裝教程Geographic Imager地圖工具使Adobe Photoshop空間圖像可以快速高效地工作。它增加了導入,編輯,操作和導出地理空間圖像的工具,例如航空和衛星圖像。Geographic Imager Mac功能非常強大,擁有柵格數據輸出、投影信息修改、基于…

【 java 集合知識 第一篇 】

1.概念 1.1.集合與數組的區別 集合&#xff1a;長度不固定&#xff0c;動態的根據數據添加刪除改變長度&#xff0c;并且只能存入引用類型&#xff0c;讀取采用迭代器或其他方法 數組&#xff1a;長度固定&#xff0c;不可改變&#xff0c;既可以存入基本類型也可以存入引用…

嵌入式開發學習日志(linux系統編程--系統編程之 進程間通信IPC)Day32

一、引言 空間獨立&#xff0c;需要一些操作&#xff1b; 分為三大類&#xff1a; 1、古老的通信方式 無名管道 有名管道 信號 2、IPC對象通信 system v BSD suse fedora kernel.org 消息隊列(用的相對少&#xff0c;這里不討論) …