紀錄 - Windows 11 Pro 安裝使用 OpenAI Codex CLI

將 Windows 11 Pro 安裝使用 ChatGPT Codex CLI 的過程記錄下來,不過依照目前版本更迭速度這麼快的情況,可能過一兩個月又會大大不同了。

什麼是 ChatGPT Codex CLI?

ChatGPT Codex CLI 是一個命令列介面工具,讓你可以直接在終端機或 shell 環境下與 ChatGPT(特別是 Codex 類型的程式碼模型)互動,不必透過瀏覽器的 web 介面。它的用途是將 Codex 的產生程式碼、解釋與修改能力帶到你的本地開發流程中,方便在編輯器、腳本、或自動化流程裡即時使用。

 

Codex 在 ChatGPT 的 Web 介面就有連結可以進入使用,但是與 Codex CLI 相比還是有很大的差別。

與在 Web 介面使用 Codex 的差異

項目Web 介面(ChatGPT/Codex)Codex CLI
使用方式在瀏覽器內操作、圖形介面在終端機透過指令操作
整合性較偏向人工互動,複製貼上到 IDE易於整合到本地開發流程、CI/CD、腳本
檔案處理需手動上傳或貼上可直接讀取/修改本地檔案
自動化無法直接串接 shell pipeline可搭配 shell 腳本、makefile、自動化工具
歷史記錄Web UI 有對話紀錄CLI 視設定而定,可用本地檔案保存
登入方式Web 帳號登入API key 或 OAuth(取決於設定)

 

Codex CLI 與 Github Copilot Agent mode 有什麼差別?

Codex CLI 與 Copilot Agent 在多檔處理上的比較

項目Codex CLIGitHub Copilot Agent 模式
多檔案支援O(透過批次指令或腳本一次處理)O(內建跨檔操作能力)
跨檔理解專案架構X(除非你自己提供 context)O(可直接讀取專案檔案樹與內容)
整合度命令列工具,需自行串接到開發流程深度整合 IDE,可即時修改檔案
自動化能力高,可結合 CI/CD、shell script低,偏人工互動
可用性任何支援命令列的環境限定支援 Copilot Chat / Agent 的 IDE
回應格式控制高,可用 prompt 控制輸出格式中,受 IDE 編輯器呈現限制

簡單比喻

  • Codex CLI:像一位你可以請到終端機來幫忙的程式助理,他能一次處理一堆檔案,但你得告訴他要改哪些、改法是什麼,而且你要自己把結果存回專案。
  • Copilot Agent:像坐在你旁邊的高級對話式 IDE 助手,他可以自己翻專案檔案、找需要改的地方,直接幫你改好並存檔。

 

Windows 11 Pro 環境要安裝使用 Code CLI 需要先準備好什麼?

在 Windows 11 Pro 環境下要安裝並使用 Codex CLI,基本上需要先準備好幾個環境條件,確保 CLI 可以正常運作和連線到 OpenAI 服務。

基本開發環境

Node.js 與 npm

  • Codex CLI 是用 JavaScript/TypeScript 寫的,所以需要 Node.js。
  • 建議安裝 LTS 版本(例如 Node.js 20.x LTS)。
  • 下載:https://nodejs.org/

安裝完檢查

Python 3

  • 某些登入/認證流程(例如 codex login)會需要 Python 來執行子程序。
  • 建議安裝 Python 3.12.x(目前最穩定版本之一)。
  • 勾選 "Add Python to PATH" 選項。

https://www.python.org/downloads/release/python-31210/

下載 Windwos Installer (64-bit)

安裝 Python 3.12.10 (64-bit)

安裝後檢查

 

設定 PowerShell 執行原則

避免 npm.ps1 被擋

# PowerShell 的安全設定調整,用來允許你在本機執行 PowerShell 腳本
# -Scope CurrentUser: 只針對目前的使用者,不影響其他帳號
# -ExecutionPolicy RemoteSigned:允許本機建立的腳本直接執行;從網路下載的腳本必須有數位簽章
# -Force: 自動接受變更,不再詢問確認
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned -Force

# 驗證目前各層級的設定
Get-ExecutionPolicy -List

 

安裝 Codex CLI

在 PowerShell 執行:

npm install -g @openai/codex

 

登入 Codex CLI

在 PowerShell 執行:

codex login

如果執行後看到的訊息是:

PS D:\develop> codex login
Python was not found; run without arguments to install from the Microsoft Store, or disable this shortcut from Settings > Apps > Advanced app settings > App execution aliases.
Error logging in: login_with_chatgpt subprocess failed:

先把「Python 指令不可用」這件事處理好,再登入。

PowerShell 依序執行下面 4 行:

python --version
py -V
where python
where py

這四行可以判斷目前是否已安裝 Python、路徑是否正確、以及是否只有 py 而沒有 python 可執行檔。

如果執行過程中有出現任何環境變數的問題而導致執行 codex login 出現錯誤,我會建議直接複製 command line 出現的訊息,然後直接問 ChatGPT。

我所遇到的狀況是:

PS D:\develop> codex login
Python was not found; run without arguments to install from the Microsoft Store, or disable this shortcut from Settings > Apps > Advanced app settings > App execution aliases.
Error logging in: login_with_chatgpt subprocess failed:
PS D:\develop>

經過一連串的設定與找尋後,失敗的原因是 Windows 有兩個 python.exe

  1. 真正的 Python
    C:\Users\UserName\AppData\Local\Programs\Python\Python312\python.exe O
  2. Microsoft Store 的假別名(會導向安裝頁面)
    C:\Users\UserName\AppData\Local\Microsoft\WindowsApps\python.exe X

Codex CLI 在呼叫 Python 時,命中了第二個(假別名),所以它以為沒安裝 Python。

要讓 codex login 成功,我們需要把 假別名 python.exe 從 PATH 移除,或直接刪掉/停用它。

手動移除假別名檔案

假別名的檔案路徑:

Rename-Item "$env:LOCALAPPDATA\Microsoft\WindowsApps\python.exe" "python_alias.bak"
Rename-Item "$env:LOCALAPPDATA\Microsoft\WindowsApps\python3.exe" "python3_alias.bak"

然後執行 where.exe python應該只會出現 C:\Users\UserName\AppData\Local\Programs\Python\Python312\python.exe

如果上面的指令都已經完成,但是最後去執行 codex login 還是出現錯誤…

PS D:\develop> where.exe python
C:\Users\UserName\AppData\Local\Programs\Python\Python312\python.exe
PS D:\develop> python --version
Python 3.12.10
PS D:\develop> codex login
Error logging in: program not found
PS D:\develop>

看起來 codex login 可能是在呼叫 python3(而我的環境只有 python.exe)。所先做一個 python3.exe 的 shim,再試一次登入。

PowerShell 依序執行以下指令

# 設定你的 Python 3.12 路徑
$pyRoot = "$env:LOCALAPPDATA\Programs\Python\Python312"

# 建立一個 python3.exe(複製自 python.exe)
Copy-Item "$pyRoot\python.exe" "$pyRoot\python3.exe" -Force

# 確認可找到 python3
where.exe python3

# 確認版本
python3 --version

 

再嘗試登入 Codex CLI

當 Python 環境變數的問題都解決好之後,接著執行

codex login

執行後會:

  1. 嘗試開啟瀏覽器
  2. 要求你用 ChatGPT 帳號登入(建議直接選「Sign in with ChatGPT」)

完成登入後

在 command line 裡就會看到 Successfully logged in

 

測試執行

codex "用 Python 寫一個快速排序"

然後我給了提示

將原地版儲存為檔案,讓我可以使用 python 指令執行

經過一段時間後,產生 quicksort_inplace.py檔案,然後我開啟另一個 Windows Terminal 去執行

由 Codex CLI 所建立的 quicksort_inplace.py檔案內容

"""
In-place QuickSort with a simple CLI.

Usage:
  python quicksort_inplace.py 3 6 8 10 1 2 1
  # If no args are provided, runs a small demo.
"""

import sys
from typing import List, Union


Number = Union[int, float]


def quicksort_inplace(a: List[Number], lo: int = 0, hi: int | None = None) -> None:
    """Sort the list `a` in place using Hoare-style partitioning."""
    if hi is None:
        hi = len(a) - 1
    if lo >= hi:
        return

    i, j = lo, hi
    pivot = a[(lo + hi) // 2]
    while i <= j:
        while a[i] < pivot:
            i += 1
        while a[j] > pivot:
            j -= 1
        if i <= j:
            a[i], a[j] = a[j], a[i]
            i += 1
            j -= 1

    if lo < j:
        quicksort_inplace(a, lo, j)
    if i < hi:
        quicksort_inplace(a, i, hi)


def _parse_num(token: str) -> Number:
    """Parse a token into int if possible, otherwise float."""
    try:
        return int(token)
    except ValueError:
        return float(token)


def main() -> None:
    if len(sys.argv) > 1:
        try:
            nums = [_parse_num(t) for t in sys.argv[1:]]
        except ValueError:
            print("Usage: python quicksort_inplace.py [numbers...]", file=sys.stderr)
            sys.exit(2)
    else:
        nums = [3, 6, 8, 10, 1, 2, 1]

    quicksort_inplace(nums)
    print(nums)


if __name__ == "__main__":
    main()

 

要離開 Codex CLI 環境,使用快速鍵 CTRL + C

如果要登出的話,在 Codex 環境下輸入 /logout

 

讓 Codex CLI 建立 ASP.NET Core WebApi

 

在 Windows Terminal 進入 codex

然後輸入

# 設定預設模式:全自動模式 (Full Auto)
/mode full-auto

接著輸入以下的提示詞(可以一行一行複製貼上,如果要換行,請使用 Shift + Enter

在目前資料夾建立一個 ASP.NET Core 9 WebAPI 專案,專案名稱為 DemoApi。
請用:dotnet new webapi -f net9.0 -n DemoApi

建立後幫我做兩件事:
1) 在 DemoApi/Program.cs 啟用 Swagger(開發與正式都啟用 UseSwagger / UseSwaggerUI)。
2) 新增 /healthz 健康檢查端點,回傳 200 OK 與字串 "OK"。

最後請執行:dotnet build
完成後把重點輸出回報給我。

輸入完畢後執行,就可以看著 Terminal 裡 Codex 做事

有時候要適時給出決策

完成

使用 Rider 開啟建立好的專案,並且執行

接著叫它幫我安裝設定 Scalar

如果遇到疑問,它會提出問題

不過可能沒有理解我的意思,它就安裝了 NSwag.AspNetCore,最後還是我直接手動安裝 Scalar.AspNetCore 與設定
 

請它修改啟動組態設定

修改後的 launchSettings.json


就記錄到這裡,今天是第一次使用 Codex CLI,還有很多不是那麼瞭解。

平常都已經習慣使用 Github Copilot,所以對 Codex CLI 就還不是那麼習慣,還有很多需要摸索。

以上

 

 

純粹是在寫興趣的,用寫程式、寫文章來抒解工作壓力