The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何在 Windows 打造一個完全沒問題的 Python 執行環境

不知道大家有沒有這種經驗?就算你裝了 Python 之後還是問題一大堆,沒事的時候就沒事,但只要一出問題就會搞好幾個小時查問題。這篇文章就是要寫給 Python 新手的執行環境安裝手冊。

image

打造 Python 執行環境很簡單

要打造一個沒問題的 Python 執行環境,其實非常簡單,只要搞定以下兩件事:

  1. 決定一個 Python 的安裝路徑

    例如: C:\Python312

  2. 設定好 PATH 環境變數

    例如: C:\Python312;C:\Python312\Scripts

感覺很簡單對不對?事情總是沒有憨人想得這麼簡單,Python 的執行環境真的比想像中複雜許多。

想要解決問題,首先要先理解問題的來源,接下來你才知道怎樣明確的解決問題。

其實有很多人不太會修改環境變數,所以導致大部分的人都需要依賴所謂的「安裝程式」來安裝 Python 執行環境。當然,安裝程式會幫你自動設定 PATH 環境變數,但我們經常需要在不同專案間切換不同的設定值。所以,你只要不會調整環境變數,很多問題都會冒出來。

理解問題的來源

你只要上網找 Python 的安裝方法,隨便都可以找出一大堆各種奇形怪狀的文章,但我打算列出幾個重要的問題點,讓你理解潛在的問題在哪裡。

  1. Python 有兩個不太相容的版本:Python 2Python 3

    這算是 Python 的歷史包袱,很無奈,但你就是必須要面對!

    如果你想使用的工具與套件只能支援 Python 2 的話,你就必須要安裝 Python 2。

    如果你想使用的工具與套件只能支援 Python 3 的話,你就必須要安裝 Python 3。

  2. 即便是 Python 3 版本,還是有小版本之間不相容的情況

    我以知名的「结巴中文分词」為例,這個專案已經 4 年多沒有任何新的進展,你如果要用這個開源的工具,被要求「只能」安裝 Python 3.7 以下的版本,只要是 Python 3.8 以上就不能用,光是安裝套件就不會成功,而且錯誤訊息非常不清楚。所以,即便連 Python 3.x 之間都還有版本問題,並不是只有 Python 2Python 3 這麼簡單而已。

  3. 我們只有一個預設的 python.exe 執行檔

    就算你設定好了 PATH 環境變數,但我們只有一個預設的 python.exe 執行檔會被執行,這個執行檔會決定你要執行哪個版本的 Python,你會怎樣選?

    你執行看看以下命令:

    python -V
    

    執行結果如下:

    Python 3.12.2
    

    如果你今天是 Python 的新手,你有很大的概率會直接安裝到 Python 的最新版本,也就是 3.12.* 的版本。

    如果你 Python 2 與 Python 3 兩個版本都想安裝,那你可能就必須要使用 python2python3 這兩個執行檔來區分版本。

    以下是我電腦的 python2.exepython3.exe 的所在路徑:

    C:\>where python2
    C:\ProgramData\chocolatey\bin\python2.exe
    
    C:\>where python3
    C:\Users\user\AppData\Local\Microsoft\WindowsApps\python3.exe
    

    既然有兩個版本,那也意味著會有兩個不同的安裝路徑,也代表會有兩組截然不同的 PATH 環境變數值要設定,但是 python.exe 只會對第一個出現在 PATH 環境變數中的路徑生效。

    問題來了,如果有個 Python 專案要求用 Python 3.7,另一個專案要用 Python 3.12,那你個電腦要怎樣安裝與配置呢?誰幫你決定 PATH 環境變數要怎樣設定?何時要切換?手動切換嗎?太麻煩了吧!所以,這是個大問題!

  4. 市場上 Python 有數十種不同的安裝程式

    是的,這萬惡的「安裝程式」有無數版本,除了 Python 官方有出 Windows 安裝程式外,Chocolatey 有出,Scoop 有出,Anaconda 有出,連微軟的 Microsoft Store 也有一套,每一個安裝程式都會幫你決定「不同」的 Python 的安裝路徑,也會幫你設定不同的 PATH 環境變數值,所以當你安裝多種不同的版本後,基本上就有可能會出問題,其實就是路徑的問題而已,但你只要設定錯誤,就會引發一堆奇怪的問題。

    我以 Python 官網的安裝檔為例,他預設會安裝到 C:\Python{ver} 目錄下。

    若以 Chocolatey 為例,他預設會安裝到 C:\ProgramData\chocolatey\bin 目錄下。

    若以 Anaconda 為例,他預設會安裝到 %USERPROFILE%\Anaconda3 目錄下。

    若以 Windows 內建的安裝程式為例,你的 Windows 在裝好之後,就有個 python.exepython3.exe 在系統內 (兩個都是 Python 3 版本),執行檔路徑位於 %localappdata%\Microsoft\WindowsApps 目錄下,也已經設定好 PATH 環境變數了,就等著你第一次去執行而已。所以當使用者第一次執行 python 命令的時候,系統會自動開啟 Microsoft Store 並自動提示你要安裝 Python 程式,感覺很貼心對不對?錯!等你有需要 Python 多版本管理的時候,就可能會開始踩地雷了!

    你知道最邪惡的地方是什麼嗎?就是這些不同的安裝程式,每一個都「有可能」會「貼心」的自動幫你設定或調整 PATH 環境變數,所以你要是在不同時期使用了不同的 Python 安裝程式,就「有機會」搞亂你的開發環境。因為,會依賴安裝程式的新手小白,通常是對 PATH 環境變數沒有概念的一群人。

    我用 Everything 整理了一下在我的電腦中,所有跟 Python 有關的路徑,這些路徑都是之前不知道裝了什麼的情況下建立起來的,真的是亂七八糟:

    # Python 官方安裝程式用的 (All Users)
    C:\Python312
    C:\Python312\Scripts
    C:\Python312\Lib
    C:\Python312\Lib\site-packages
    
    # Chocolatey
    %appdata%\Python
    %appdata%\Python\Scripts
    %appdata%\Python\Python37\Scripts
    %appdata%\Python\Python37\site-packages
    
    # Python 官方安裝程式用的 (Just Me)
    %localappdata%\Programs\Python\Python37
    %localappdata%\Programs\Python\Python37\Scripts
    %localappdata%\Programs\Python\Python37\Lib
    %localappdata%\Programs\Python\Python37\Lib\site-packages
    
    # 不知道何時裝的,也不知道何時會用到
    C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\opt\lib\python2.7\site-packages
    C:\tools\msys64\usr\lib\python2.7\site-packages
    C:\tools\msys64\usr\lib\python3.4\site-packages
    

    總結來說,身為一位開發人員,你不可能只面對一個 Python 版本,你有非常高的機率需要在一台電腦中安裝多個不同的 Python 版本,沒遇到這種狀況只能說你還太嫩了! 😅

解決問題的方法

基本上,你總是會有機會需要管理多版本的 Python 執行環境,而且我們需要一個可以「自動」切換環境變數的工具,這樣才能夠讓我們專注在開發上,而不是在環境設定上浪費時間。

因此,有個 Python Virtual Environment (Python 虛擬環境) 的概念就產生了,這個概念就是讓你可以在同一台電腦中安裝多個不同版本的 Python,並且可以在不同專案中切換不同的 Python 版本,透過虛擬環境幫你自動調整 PATH 環境變數,簡化環境管理上的複雜度。

以下我列出幾個比較知名的 Python 虛擬環境管理工具:

  1. venv

    venvPython 3.3 版本後內建的虛擬環境工具,使用上非常容易上手,建立虛擬環境只要一個命令,啟用環境也只要一個命令:

    REM 建立一個專案目錄
    mkdir pydemo
    REM 進入專案目錄
    cd pydemo
    REM 用 Python 3.7 的 python -m venv 建立一個虛擬環境的資料夾 .venv
    %localappdata%\Programs\Python\Python37\python.exe -m venv .venv
    REM 啟用虛擬環境 (其實就只是幫你設定好 PATH 環境變數而已)
    .venv\Scripts\activate.bat
    

    使用 venv 可以不需要額外安裝其他套件就能建立虛擬環境,比較輕量,但不支援 Python 2

    詳細使用說明參見 venv — Creation of virtual environments 官網文件。

  2. virtualenv

    virtualenv 也是一套 Python 虛擬環境管理工具,從 Python 3.3 開始就有部分功能整併到 Python 官方的 venv 模組中。virtualenv 擁有比 venv 還完整且強大的功能,擴充性也比較強。

    相關教學可以參閱 Python 的 Virtualenv 虛擬環境安裝與使用 - AI for K-12 - Medium 文章。

  3. Poetry

    Poetry 類似 Python 的 pip 套件管理工具,至少需要 Python 3.8 以上版本才能用,功能也強大許多,因為它還包含虛擬環境管理功能,而且選項設定可以調整的地方很多,可以說是專業級的工具。當然,相對的上手門檻就會高一些,但也沒想像中這麼難啦,以下這篇文章看完就會用了。

    Python 套件管理器——Poetry 完全入門指南 - Code and Me

  4. conda

    conda 應該也算是老牌的 Python 虛擬環境管理工具了,使用上也算簡便,很好上手。

    相關教學請見 用conda建立及管理python虛擬環境 文章。

  5. Anaconda

    Anaconda 內建了「環境管理」功能,算是早期非常好的選擇,不過這套的缺點就是安裝程式有點大,太肥了。

    相關教學請見 Python 入門必看!Windows 懶人搭建Anaconda Python 學習環境-入門系列 文章。

  6. miniconda

    minicondaAnaconda 的輕量版,僅包含了必要的 condaPython 與一些常用套件。

    相關教學請見 Miniconda 手把手安裝教學 輕量化 Anaconda 客製化自由選擇 文章。

  7. pyenv

    pyenv 也是知名的 Python 多版本管理工具,但他並不是建立虛擬環境,而是主要幫助你切換 Python 版本,幫助你調整環境變數而已。

    相關教學請見 [Python 版本控制] pyenv 基本教學 文章。

    若想跟 Poetry 搭配使用,可參考 Poetry + pyenv 教學:常用指令與注意事項 文章。

  8. pipenv

    pipenv 是一個 Python 虛擬環境管理工具,可以協助開發人員達成一致的專案環境。

    相關教學請見 Pipenv 更簡單、更快速的 Python 套件管理工具 文章。

以下算是開發工具與執行環境,有些免安裝就能用:

  1. WinPython

    WinPython 是一個免費開源的 Windows 10/11 的可攜式 Python 發行版,免安裝就能用,適用於科學和教育使用。

  2. Thonny

    Thonny 是一個輕量級的 Python 開發環境,適合初學者使用,有免安裝版。

  3. PyCharm

    PyCharm 是一套商用的 Python 的 IDE 整合開發環境,為了簡化對初學者的複雜度,他預設會替每個專案產生一個虛擬環境,所以可以無腦上手。

正確的 Python 安裝方法: venv

以下我以 jieba (结巴中文分词) 為例,搭配 Python 內建的 venv 模組進行虛擬環境建立,分享我個人的安裝方式,僅供參考。

  1. 無論如何,都要先安裝所需的 Python 版本,而且是從 Python 官網下載安裝檔

    安裝程式下載: https://www.python.org/downloads/release/python-379/

    安裝時有個重點就是,安裝時不要將 Python 加入到 PATH 環境變數中!

    因為我主要想透過 venv 來管理虛擬環境,所以我不希望 Python 安裝程式自動幫我設定 PATH 環境變數。

    安裝時可以選擇安裝到「所有使用者」與「僅自己」兩種,建議是安裝到「僅自己」就好,這部分預設會安裝到 %localappdata%\Programs\Python 目錄下。例如 Python 3.7 就會自動安裝到 %localappdata%\Programs\Python\Python37 目錄。

    安裝完成後, 預設的 python.exe 會在以下路徑:

    %localappdata%\Programs\Python\Python37\python.exe
    

    若要手動設定 PATH 環境變數,可以參考以下這兩個路徑,但其實不用特別手動設定!

    %localappdata%\Programs\Python\Python37
    %localappdata%\Programs\Python\Python37\Scripts
    
  2. 初始化 venv 環境

    建立專案資料夾

    cd pydemo && cd pydemo
    

    用剛剛安裝的 Python 3.7 程式所附的 python.exe 來建立虛擬環境:

    %localappdata%\Programs\Python\Python37\python.exe -m venv .venv
    
  3. 啟用虛擬環境並開啟 VS Code 編輯器

    啟用虛擬環境 (其實就只是幫你設定好 PATH 環境變數而已)

    .venv\Scripts\activate.bat
    

    注意: 如果你在 VS Code 裡面使用 Microsoft 設計的 Python 擴充套件,其實你連 Scripts\activate.bat 都不用執行,VS Code 會自動幫你啟用虛擬環境!👍

    開啟 VS Code 編輯器 (一定要在啟用環境後再開啟 VS Code 編輯器)

    code .
    
  4. 安裝 jieba 相關套件

    一定要啟用虛擬環境後才能安裝套件!

    pip install jieba paddlepaddle-tiny protobuf==3.20.0
    
  5. 撰寫 Python 應用程式

    檔名:main.py

    # encoding=utf-8
    import jieba
    
    jieba.enable_paddle()# 启动paddle模式。 0.40版之后开始支持,早期版本不支持
    strs=["我来到北京清华大学","乒乓球拍卖完了","中国科学技术大学"]
    for str in strs:
        seg_list = jieba.cut(str,use_paddle=True) # 使用paddle模式
        print("Paddle Mode: " + '/'.join(list(seg_list)))
    
    seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
    print("Full Mode: " + "/ ".join(seg_list))  # 全模式
    
    seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
    print("Default Mode: " + "/ ".join(seg_list))  # 精确模式
    
    seg_list = jieba.cut("他来到了网易杭研大厦")  # 默认是精确模式
    print(", ".join(seg_list))
    
    seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式
    print(", ".join(seg_list))
    
  6. 執行 Python 程式

    python main.py
    

正確的 Python 安裝方法: Poetry

以下我以 jieba (结巴中文分词) 為例,搭配 Poetry 來建立 Python 虛擬環境,分享我個人的安裝方式,僅供參考。

  1. 無論如何,都要先安裝所需的 Python 版本,而且是從 Python 官網下載安裝檔

    安裝程式下載: https://www.python.org/downloads/release/python-379/

    安裝時有個重點就是,安裝時不要將 Python 加入到 PATH 環境變數中!

    因為我主要想透過 Poetry 來管理虛擬環境,所以我不希望 Python 安裝程式自動幫我設定 PATH 環境變數。

    安裝時可以選擇安裝到「所有使用者」與「僅自己」兩種,建議是安裝到「僅自己」就好,這部分預設會安裝到 %localappdata%\Programs\Python 目錄下。例如 Python 3.7 就會自動安裝到 %localappdata%\Programs\Python\Python37 目錄。

    安裝完成後, 預設的 python.exe 會在以下路徑:

    %localappdata%\Programs\Python\Python37\python.exe
    
  2. 初始化 pyproject.toml 定義檔

    mkdir pydemo
    cd pydemo
    
    poetry init
    
  3. 啟用虛擬環境並開啟 VS Code 編輯器

    設定讓虛擬環境直接建立在專案目錄下 (.venv) (這個命令一台電腦只需要執行一次)

    poetry config virtualenvs.in-project true
    

    建立虛擬環境 (其實就只是幫你設定好 PATH 環境變數而已)

    poetry env use "%localappdata%\Programs\Python\Python37\python.exe"
    

    列出虛擬環境清單

    poetry env list
    

    開啟 VS Code 編輯器

    code .
    
  4. 安裝 jieba 相關套件

    一定要啟用虛擬環境後才能安裝套件!

    poetry add jieba paddlepaddle-tiny protobuf==3.20.0
    
  5. 撰寫 Python 應用程式

    檔名:main.py

    # encoding=utf-8
    import jieba
    
    jieba.enable_paddle()# 启动paddle模式。 0.40版之后开始支持,早期版本不支持
    strs=["我来到北京清华大学","乒乓球拍卖完了","中国科学技术大学"]
    for str in strs:
        seg_list = jieba.cut(str,use_paddle=True) # 使用paddle模式
        print("Paddle Mode: " + '/'.join(list(seg_list)))
    
    seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
    print("Full Mode: " + "/ ".join(seg_list))  # 全模式
    
    seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
    print("Default Mode: " + "/ ".join(seg_list))  # 精确模式
    
    seg_list = jieba.cut("他来到了网易杭研大厦")  # 默认是精确模式
    print(", ".join(seg_list))
    
    seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式
    print(", ".join(seg_list))
    
  6. 執行 Python 程式

    python main.py
    

總結

我個人會比較傾向使用 Python 官方的 venv 模組來建立虛擬環境,因為他是 Python 內建的模組,不需要額外安裝,而且使用上非常簡單,不需要學習太多的東西,只要會用命令列就可以了。如果用 Visual Studio Code 開發 Python 的話,那更方便,因為 Python 擴充套件會自動幫你啟用 Python 虛擬環境,也非常方便。

我有些專案也會使用 Poetry 來管理專案的套件,因為微軟有些專案就是直接用 Poetry 來管理 Python 套件的,我覺得很方便,下載套件後直接執行 poetry install 就可以把相依套件裝好,無腦使用 Python 開發。感謝 Python 套件管理器——Poetry 完全入門指南 文章的幫助,讓我更了解 Poetry 的使用方式。

相關連結

留言評論