3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSL2にCodex CLIを導入して、Windows側VS Codeからvenv固定で使う手順

3
Posted at

この手順は、Codex CLI を WSL(Ubuntu)にインストールし、Windows側の VS Code を Remote - WSL で接続して利用するための備忘録的なマニュアルです。自分で調べながら実践した内容をまとめてみました。
さらに、venv_test のような 別ディレクトリの venv を必ず使って実行するために、./tools/py./tools/pip を作って venv固定します。

内容は記事投稿時点のものなので最新の情報は公式などを参照してください。


想定環境

  • Windows + WSL2(Ubuntu)
  • Windows側 VS Code(Remote - WSL を使用)
  • venv 例:~/venv_test(中に bin/python がある)
  • 編集対象例:~/venv_test/scripts/(配下の深い階層も編集対象)

以後、~/venv_test~/venv_test/scripts は環境に合わせて置き換えてください。


0) まず「WSL接続の VS Code」になっているか確認

0-1. WSL2の確認(Windows PowerShell or コマンドプロンプト)

wsl -l -v

VERSION 2 の Ubuntu が対象です。

0-2. VS Code に Remote - WSL を入れる

VS Code の拡張機能から WSL(Remote - WSL) をインストール。

image.png

0-3. WSL側でプロジェクトへ移動し、そこから VS Code を起動(推奨)

WSLターミナルで下記入力

cd ~/venv_test/scripts
code .

VS Code 左下が WSL: ... になっていればOKです。

image.png

0-4. VS Code の「統合ターミナル」が WSL か確認

VS Code で ターミナル → 新しいターミナル を開き、次を実行

uname -a
pwd

uname -a が Linux、pwd/home/... なら WSL 側です。


1) よくある事故:WSLなのにWindows側のnpm/codexを拾って「node not found」になる

典型エラー:

/mnt/c/Users/<you>/AppData/Roaming/npm/codex: exec: node: not found

原因:WSLのPATHにWindows側のNode/npmが混ざっており、WSLなのにWindows側の npm / codex を拾っている。

1-1. まず現状確認(WSLターミナル)

type -a npm
type -a node
type -a codex

NG例

  • npm is /mnt/c/Program Files/nodejs/npm
  • codex is /mnt/c/Users/.../npm/codex
  • node: not found

→ 次の「nvm + Node」を入れて、WSL側に揃えます。


2) WSL側に Node.js / npm を用意(nvm 推奨)

2-1. nvm を入れる

sudo apt update
sudo apt install -y curl ca-certificates
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
source ~/.bashrc

2-2. Node を入れる(例:22)

nvm install 22
nvm use 22
nvm alias default 22
node -v
npm -v

3) Codex CLI を WSL にインストール

3-1. インストール

npm i -g @openai/codex
hash -r

3-2. 正しくWSL側の codex を拾っているか確認

which codex
codex --version
type -a codex

OK条件

  • which codex/home/<user>/.nvm/.../bin/codex のように WSL側
  • codex --versioncodex-cli x.y.z

type -a codex に Windows側が残って見えても、which codex が WSL側なら動作上はOKです(PATH優先順でWSLが勝っている)。


4) 新しいターミナルでも毎回nvmが有効になるよう固定(推奨)

新しいターミナルで node が消える/また Windows側に戻る場合に備えて、~/.bashrc に追記します。

4-1. 追記(WSLターミナル)

cat >> ~/.bashrc << 'EOF'

# --- Ensure nvm default node is active in interactive shells ---
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
nvm use default >/dev/null 2>&1
hash -r
EOF

4-2. 反映して確認

source ~/.bashrc
which node
node -v
which codex
codex --version

5) venv を “必ず” 使わせる(venv_test などが別ディレクトリでもOK)

Codexはコマンド実行時に環境が変わることがあるため、source activate だけに頼ると python が system 側に戻る場合があります。
一番事故が少ないのは venvの python/pip をパス固定した入口を作る方法です。

5-1. venv の python/pip の実体を確認

ls -la ~/venv_test/bin/python
ls -la ~/venv_test/bin/pip

存在しないなら、venvの実パスに合わせて以後の $HOME/venv_test を置換してください。

5-2. プロジェクトルートに tools/pytools/pip を作る

(例:~/venv_test/scripts

cd ~/venv_test/scripts
mkdir -p tools

cat > tools/py << 'EOF'
#!/usr/bin/env bash
exec "$HOME/venv_test/bin/python" "$@"
EOF
chmod +x tools/py

cat > tools/pip << 'EOF'
#!/usr/bin/env bash
exec "$HOME/venv_test/bin/pip" "$@"
EOF
chmod +x tools/pip

5-3. venv 固定が効いているか確認

./tools/py -c "import sys; print(sys.executable)"
./tools/pip -V

ここで .../venv_test/bin/python が出ればOKです。


6) VS Code(WSL接続)の統合ターミナルから Codex を起動

6-1. 起動場所(重要)

Codex は「起動したディレクトリ配下」を編集対象とするため、編集したい範囲を含むディレクトリで起動します。起動時にOpenAIへのログインが必要です。

例:

cd ~/venv_test/scripts
codex

6-2. 起動直後に必ず venv を確認(Codex内で実行)

Codex のプロンプトで下記入力

./tools/py -c "import sys; print(sys.executable)"
./tools/pip -V

6-3. Codex に「実行ルール」を一度だけ宣言(コピペ推奨)

Codexのプロンプトに文章で下記を指示:

  • 以後、Python実行は ./tools/py を使う
  • pip は ./tools/pip
  • pytest は ./tools/py -m pytest
  • pythonpip を直接使わない

7) pip install がCodex内で失敗する(DNS/到達不可)場合

Codex のサンドボックス設定によって、Codex内からの pip install が失敗することがあります。

選択肢A(おすすめ):インストールだけ Codex外の通常WSLターミナルで実施

VS Codeで 別の統合ターミナルを開いて、そこで

cd ~/venv_test/scripts
./tools/pip install -U pytest
./tools/py -m pytest

選択肢B:Codex内でも pip install したい(プロジェクトだけネット許可)

プロジェクト直下に .codex/config.toml を作る

cd ~/venv_test/scripts
mkdir -p .codex
cat > .codex/config.toml << 'EOF'
sandbox_mode = "workspace-write"

[sandbox_workspace_write]
network_access = true
EOF

反映には Codex 再起動が必要

  • Codex画面で /quit
  • シェルに戻って codex

なお、network_access は “true/false” の二択として提供されており、「localhostだけ許可」のような細かい制御は設定だけではできません(必要ならOS側FW等で外部制御が必要です)。


8) WSLg(GUI)が Codex 実行だと出ない場合の切り分け

手動実行ではGUIが出るのに、Codexの実行だけ Cannot connect to "None" になる場合があります。まずは状況確認。

8-1. WSLg の環境変数とソケット確認

echo "DISPLAY=$DISPLAY"
echo "WAYLAND_DISPLAY=$WAYLAND_DISPLAY"
echo "XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR"
ls -la /tmp/.X11-unix/X0 || true
ls -la /mnt/wslg/runtime-dir/wayland-0 || true

8-2. 最小 pyglet テスト(X接続できるか)

./tools/py - << 'PY'
import os
print("DISPLAY", os.environ.get("DISPLAY"))
import pyglet
w = pyglet.window.Window(visible=False, width=64, height=64)
print("window created OK")
w.close()
PY
  • window created OK → X接続はOK。アプリ側の設定/初期化を疑う
  • Cannot connect to "None" → Codex実行の制約(サンドボックス)の影響が疑わしい
    • network_access=true にすると通る環境もあります(副作用としてGUIが通ることがある)
    • それでもダメなら、GUI実行は Codex外(通常WSLターミナル)に分離するのが安定です

9) 最終チェック(これが通れば導入完了)

WSL(VS Code統合ターミナル)で下記入力

which codex
codex --version
./tools/py -c "import sys; print(sys.executable)"
./tools/pip -V
  • codex が /home/...
  • python/pip が ~/venv_test

になっていれば完成です。


付録:Codexの再起動方法

  • Codex画面で /quit(または /exit
  • シェルプロンプトに戻ったら codex を実行

付録:よくあるエラー早見表

A) codex: exec: node: not found

  • WSLなのにWindowsのnpm/codexを拾っている
    → nvmでWSL側にNodeを入れ、which codex/home/... になるまで直す

B) Codex内の pip install がDNSエラー/到達不可

  • network_access が無効
    .codex/config.tomlnetwork_access=true、またはインストールだけ通常ターミナルで実施

C) GUIが Cannot connect to "None"

  • WSLgの環境変数/ソケット確認 → 最小pygletテスト
    network_access=true で改善する場合あり。ダメならGUI実行を分離

D) CUDA初期化が Error 304

  • nvidia-smi が見えてもCUDAは別
    → Codex外(通常ターミナル)で実行を推奨。必要ならサンドボックス設定の見直し
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?