<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Venv on YuChen</title><link>https://Dandelionlibra.github.io/tags/venv/</link><description>Recent content in Venv on YuChen</description><generator>Hugo -- gohugo.io</generator><language>zh-Hant-TW</language><lastBuildDate>Sat, 25 Apr 2026 03:29:13 +0800</lastBuildDate><atom:link href="https://Dandelionlibra.github.io/tags/venv/index.xml" rel="self" type="application/rss+xml"/><item><title>如何使用 venv 建立 Python 虛擬環境</title><link>https://Dandelionlibra.github.io/2026/04/how-to-use-venv/</link><pubDate>Sat, 25 Apr 2026 03:29:13 +0800</pubDate><guid>https://Dandelionlibra.github.io/2026/04/how-to-use-venv/</guid><description>&lt;h2 id="內容大綱"&gt;內容大綱
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;a class="link" href="#1-%e4%bb%80%e9%ba%bc%e6%98%af%e8%99%9b%e6%93%ac%e7%92%b0%e5%a2%83%e7%82%ba%e4%bd%95%e9%9c%80%e8%a6%81%e5%ae%83" &gt;什麼是虛擬環境？為何需要它？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#2-%e5%bb%ba%e7%ab%8b%e8%99%9b%e6%93%ac%e7%92%b0%e5%a2%83" &gt;建立虛擬環境&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#3-%e9%80%b2%e9%9a%8e%e5%8f%83%e6%95%b8%e6%8c%87%e4%bb%a4-options" &gt;進階參數指令 (Options)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#4-%e5%95%9f%e5%8b%95%e8%88%87%e9%80%80%e5%87%ba%e8%99%9b%e6%93%ac%e7%92%b0%e5%a2%83" &gt;啟動與退出虛擬環境&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#5-%e5%a5%97%e4%bb%b6%e7%9a%84%e5%ae%89%e8%a3%9d%e5%8c%af%e5%87%ba%e8%88%87%e6%89%b9%e6%ac%a1%e7%a7%bb%e9%99%a4" &gt;套件的安裝、匯出與批次移除&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="#6-%e5%b8%b8%e8%a6%8b%e5%95%8f%e9%a1%8c%e8%88%87%e6%b3%a8%e6%84%8f%e4%ba%8b%e9%a0%85" &gt;常見問題與注意事項&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3 id="1-什麼是虛擬環境為何需要它"&gt;1. 什麼是虛擬環境？為何需要它？
&lt;/h3&gt;&lt;p&gt;在開發 Python 專案時，經常需要使用 &lt;code&gt;pip&lt;/code&gt; 安裝各種第三方套件。如果不使用虛擬環境，所有套件都會被安裝到系統全域環境中。這樣會產生幾個嚴重問題：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;版本衝突&lt;/strong&gt;：專案 A 需要 &lt;code&gt;Django 3.0&lt;/code&gt;，但專案 B 卻依賴 &lt;code&gt;Django 4.0&lt;/code&gt;，兩者無法共存於同一個環境。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;環境污染&lt;/strong&gt;：全域環境累積過多不需要的套件，難以管理。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;venv&lt;/code&gt; 是 Python 3.3 之後內建的虛擬環境管理工具，它能為每個專案建立一個獨立的資料夾。在這個資料夾中，擁有獨立的 Python 執行檔與獨立的套件庫，從而完美隔離各個專案。&lt;/p&gt;
&lt;h3 id="2-建立虛擬環境"&gt;2. 建立虛擬環境
&lt;/h3&gt;&lt;p&gt;建立虛擬環境主要有兩種指定路徑的方式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;方式一：在目前目錄下建立（相對路徑）&lt;/strong&gt;
請先開啟終端機，並使用 &lt;code&gt;cd&lt;/code&gt; 指令切換到專案資料夾，接著輸入以下指令：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Windows / macOS / Linux 通用指令&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;python -m venv venv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;python -m venv&lt;/code&gt;：呼叫 Python 內建的 &lt;code&gt;venv&lt;/code&gt; 模組。&lt;/li&gt;
&lt;li&gt;最後的 &lt;code&gt;venv&lt;/code&gt;：這是即將產生的虛擬環境資料夾名稱。一般約定成俗會將其命名為 &lt;code&gt;venv&lt;/code&gt; 或 &lt;code&gt;.venv&lt;/code&gt;。執行後，目前的專案目錄下就會多出這個資料夾。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;方式二：在指定位置建立（絕對路徑）&lt;/strong&gt;
如果不想將虛擬環境放在專案資料夾內，或者想統一集中管理所有虛擬環境，可以直接指定一個完整的路徑：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;python -m venv /path/to/new/virtual/environment
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;兩個指令的差別：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;python -m venv venv&lt;/code&gt;&lt;/strong&gt;：利用&lt;strong&gt;相對路徑&lt;/strong&gt;，將虛擬環境建立在「目前終端機所在的資料夾」底下。適合讓每個專案擁有專屬、跟隨專案代碼的環境，這也是最常見的做法。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;python -m venv /path/to/...&lt;/code&gt;&lt;/strong&gt;：利用&lt;strong&gt;絕對路徑&lt;/strong&gt;（或明確指定的路徑），無論目前終端機在哪個目錄，都會將虛擬環境強制建立在指定的特定位置上。適合習慣把所有虛擬環境統一存放在同一個集中目錄（例如 &lt;code&gt;~/.virtualenvs/&lt;/code&gt;）的開發情境。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不管使用哪種方式，執行後該資料夾裡面都會包含獨立的 Python 執行檔與套件庫結構。&lt;/p&gt;
&lt;h3 id="3-進階參數指令-options"&gt;3. 進階參數指令 (Options)
&lt;/h3&gt;&lt;p&gt;在建立虛擬環境時，可以在終端機加上特定的參數來客製化環境設定（可透過 &lt;code&gt;python -m venv -h&lt;/code&gt; 查詢完整列表），以下介紹幾個常用的進階參數：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--system-site-packages&lt;/code&gt;&lt;/strong&gt;：預設情況下，虛擬環境是完全隔離的。加上此參數後，虛擬環境將「可以存取」系統全域 (System-wide) 所安裝的套件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--clear&lt;/code&gt;&lt;/strong&gt;：如果指定的資料夾已經存在，加上此參數會在建立前「先清空」該資料夾裡的所有內容，相當於重新建立一個乾淨的環境。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--without-pip&lt;/code&gt;&lt;/strong&gt;：建立環境時預設會自動安裝 &lt;code&gt;pip&lt;/code&gt;。若加上此參數則會跳過安裝。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--prompt &amp;lt;PROMPT&amp;gt;&lt;/code&gt;&lt;/strong&gt;：自訂啟動虛擬環境後，終端機前面顯示的「提示字元前綴」（預設為資料夾的名稱）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--upgrade-deps&lt;/code&gt;&lt;/strong&gt;：建立環境的同時，將環境內的基礎套件（如 &lt;code&gt;pip&lt;/code&gt; 和 &lt;code&gt;setuptools&lt;/code&gt;）直接升級到 PyPI 上的最新版本。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--without-scm-ignore-files&lt;/code&gt;&lt;/strong&gt;：建立環境時，不自動生成原始碼控制的忽略檔（新版 Python 預設會自動產生 &lt;code&gt;.gitignore&lt;/code&gt;）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="4-啟動與退出虛擬環境"&gt;4. 啟動與退出虛擬環境
&lt;/h3&gt;&lt;p&gt;建立好之後，需要「啟動 (Activate)」它，讓系統知道接下來的操作都要在這個隔離環境內進行。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;啟動虛擬環境 (Windows Command Prompt)：&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cmd" data-lang="cmd"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;venv\Scripts\activate.bat
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;啟動虛擬環境 (Windows PowerShell)：&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;venv\Scripts\Activate.ps1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;啟動虛擬環境 (macOS / Linux)：&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;source venv/bin/activate
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;啟動成功後，終端機的提示字元前方通常會出現 &lt;code&gt;(venv)&lt;/code&gt;，代表目前已經身處於虛擬環境中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;退出虛擬環境：&lt;/strong&gt;
當開發結束，想要回到系統全域環境時，只需執行：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;deactivate
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="5-套件的安裝匯出與批次移除"&gt;5. 套件的安裝、匯出與批次移除
&lt;/h3&gt;&lt;p&gt;在虛擬環境啟動的狀態下，使用 &lt;code&gt;pip install&lt;/code&gt; 安裝的任何套件，都會被存放在這個虛擬環境中，完全不會影響到系統。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;安裝套件：&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pip install requests
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;匯出套件清單：&lt;/strong&gt;
為了讓專案能夠在其他電腦上重現相同的環境，會將目前安裝的所有套件名稱與版本匯出成一份清單。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pip freeze &amp;gt; requirements.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;從清單還原環境：&lt;/strong&gt;
當其他人拿到專案時，只要先建立並啟動自己的虛擬環境，就可以透過這份清單一次安裝所有必需的套件。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pip install -r requirements.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;強制清空環境的所有套件：&lt;/strong&gt;
如果環境遭到污染（裝了太多不相關的套件），或者想將目前環境打掉重練，可以利用 &lt;code&gt;pip freeze&lt;/code&gt; 配合 &lt;code&gt;pip uninstall&lt;/code&gt; 來一鍵批次卸載所有第三方套件。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;首先，將目前所有安裝的套件清單匯出到一個暫存檔：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pip freeze &amp;gt; uninstall.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;接著，讓 pip 讀取這個清單，並強制 (&lt;code&gt;-y&lt;/code&gt;) 刪除裡面的所有套件：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pip uninstall -r uninstall.txt -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;(備註：&lt;code&gt;pip freeze&lt;/code&gt; 預設不會把基礎套件 &lt;code&gt;pip&lt;/code&gt;、&lt;code&gt;setuptools&lt;/code&gt;、&lt;code&gt;wheel&lt;/code&gt; 列入清單，因此不用擔心會刪除到這三個核心套件。)&lt;/em&gt;&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;刪除完成後，再把暫存檔清掉即可：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Windows 命令提示字元 (cmd):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;del uninstall.txt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Windows PowerShell:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Remove-Item uninstall.txt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# macOS / Linux:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rm uninstall.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="6-常見問題與注意事項"&gt;6. 常見問題與注意事項
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;不要將 venv 資料夾加入版本控制&lt;/strong&gt;：虛擬環境資料夾體積龐大且包含系統特定的編譯檔案。請務必在 &lt;code&gt;.gitignore&lt;/code&gt; 檔案中加入 &lt;code&gt;venv/&lt;/code&gt;，避免將它推送到 GitHub。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PowerShell 執行原則錯誤&lt;/strong&gt;：在 Windows PowerShell 啟動時如果遇到「執行原則不允許」的紅色錯誤，請以系統管理員身分開啟 PowerShell 並執行 &lt;code&gt;Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser&lt;/code&gt; 即可解決。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="參考資料"&gt;參考資料
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.python.org/zh-tw/3/library/venv.html" target="_blank" rel="noopener"
&gt;Python 官方文件：venv — 建立虛擬環境&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>