💭

Linux開発環境の最短セットアップと「apt / pip / venv / npm / Docker」の関係

に公開

「pandas が入っているのに import できない」「どの venv で動いているのか分からない」——はじめて VS Code+Jupyter を使う人が踏みがちな落とし穴を、最短で動かす手順と仕組みの見取り図で解消します。読み終わる頃には、「何をどこに入れればよいか/なぜエラーになるか」が説明できる状態になります。

道具の役割を一行で

Docker = OSごと箱             (一番広い)
apt    = Linux 用の配布物管理  (Python本体やCライブラリなど)
pip    = Python用の配布物管理 (numpy, pandas など)
venv   = インストール先を区切る仕切り(プロジェクト単位)
npm    = Node.js用の配布物管理(CLIやJSライブラリ)

原則

  • OSに近いものは apt、Pythonライブラリは pip、JSは npm。
  • pip は venv の中で使う(=プロジェクトごとに依存を分離)。
  • Dockerは丸ごと箱。中で apt/pip/npm を使う。

15分で動かす「最短レシピ」

1.1 接続と基本確認

# SSH でサーバへ(略)

# OS 情報
cat /etc/os-release

# 実行ユーザーと権限
whoami
id

パッケージの更新と最低限のツール

# パッケージ一覧を更新
sudo apt update

# (必要に応じて)既存パッケージを最新化
# sudo apt upgrade -y

# ビルドや取得に最低限あると便利
sudo apt install -y build-essential git curl wget

# Python と pip(未導入なら)
sudo apt install -y python3 python3-venv python3-pip

メンテ:不要パッケージの候補確認 → 実行

sudo apt autoremove --dry-run

# 問題なさそうなら
# sudo apt autoremove -y

プロジェクトごとに仮想環境(venv)

# 新規プロジェクト例
mkdir ~/workspace/projectX && cd $_

# 仮想環境を作成
python3 -m venv .venv

# 有効化(fish/zsh/bashで若干異なるが代表例)
source .venv/bin/activate

# pip を最新化+Jupyter から見えるようにする
python -m pip install -U pip setuptools wheel
python -m pip install -U ipykernel

# この venv を Jupyter のカーネル候補へ登録
python -m ipykernel install --user --name projectX --display-name "Python (projectX)"

# よく使うライブラリ
python -m pip install pandas numpy matplotlib

# VS Code を開く
code .

健康診断セル(Notebook 先頭に実行)

import sys
print("Python実行ファイル:", sys.executable)  # ← .../projectX/.venv/bin/python が出ればOK

import pandas, numpy, matplotlib
print("pandas:", pandas.__version__)

補足:pip は常に python -m pip ... の形で実行すると、今の Python(=今選んだ venv)に確実に入ります。

仕組みの見取り図(最短理解)

┌────────────── OS (Ubuntu 等) ──────────────┐
│  apt ← Python本体/エディタ/システム系       │
│                                              │
│  ┌────── Docker コンテナ(任意) ───────┐  │
│  │  ここでも apt/pip/npm を使える         │  │
│  └───────────────────────────────────┘  │
│                                              │
│  ┌─ プロジェクト A ───────────────────┐   │
│  │  .venv/ ← ここに A 用の Python 本体   │
│  │  pip で A 専用のライブラリを入れる     │
│  └───────────────────────────────────┘   │
│  ┌─ プロジェクト B ───────────────────┐   │
│  │  .venv/ ← ここに B 用の Python 本体   │
│  │  pip で B 専用のライブラリを入れる     │
│  └───────────────────────────────────┘   │
│                                              │
│  Node.js 系は npm(`-g`は全体, なしはローカル)│
└──────────────────────────────────────────┘

ポイント

  • apt は OS にインストールされる「配布物(パッケージ)」を扱う。
  • venv は インストール先を分ける“箱”。
  • pip はその箱の中に Python ライブラリを入れる。
  • Jupyter は「どの箱を使うか(=カーネル)」を選ぶ UI。
  • VS Code は「どの Python を使うか(インタプリタ)」と「Notebook のカーネル」を別々に持つ。両方 .venv を指すことが肝。

VS Code+Jupyter の正しい合わせ方

Interpreter(VS Code 左下/コマンドパレット):
…/projectX/.venv/bin/python を選択。

Kernel(Notebook 右上):
「Python (projectX)」を選択(ipykernel install で登録した表示名)。

ずれの検出:Notebookで print(sys.executable)。.venv/bin/python 以外ならずれています。

不要カーネルの整理

jupyter kernelspec list
jupyter kernelspec remove <いらない名前>

典型トラブル → 原因 → 一手で直す

ModuleNotFoundError: No module named 'pandas'
→ Notebook が別の環境を見ている。
対処:Notebook 右上のカーネルを「Python (projectX)」へ。必要なら再登録。

pip で入れたはずが見えない
→ 別の Python に入っている。
対処:python -m pip install ... に統一。python -m pip show pandas で所在確認。

sudo pip を使ってしまった
→ システム領域に混在し事故の元。
対処:sudo を外し、venv 内でやり直す。

apt と pip を同じ場所に混在
→ 競合・破損の温床。
対処:apt はシステム、pip は venv と住み分ける。

npm と CLI(例:Gemini CLI)

npm 基本

npm install <pkg> … プロジェクトローカルに導入

npm install -g <pkg> … システム全体に導入(パスが通り、どこでもコマンドとして使える)

Gemini CLI の導入例

# Node.js / npm(環境に応じて導入。Ubuntuなら簡易には)
sudo apt install -y nodejs npm

# CLI をグローバルに入れる
npm install -g @google/gemini-cli

初回起動・認証フロー

gemini
# 案内に従い、表示されたURLでログイン→コードをコピー→ターミナルに貼り付け

備考:サーバの Node.js バージョン管理が必要なら nvm などの利用も一般的。

ネットワーク(Ubuntu の nmcli 速習)

# デバイス確認(Wi-Fi インタフェース名を特定:例 wlp3s0)
nmcli device

# 見えるSSID一覧
nmcli device wifi list

# 接続
nmcli device wifi connect "SSID名" password "パスワード"

SSH 中にネットワークを切替えると接続ごと落ちることがある。リモート作業時は十分注意(可能ならコンソール接続で実施)。

運用の作法(衝突を防ぐ)

プロジェクトごとに venv(.venv 固定名推奨:ツールが自動検出しやすい)。

試行錯誤は 「共通スターター venv」 で、成果が固まったら各プロジェクトへ再現手順を移す。

依存は requirements.txt や pyproject.toml に固定(再現性)。

迷ったら print(sys.executable) と pip show で所在確認。

Discussion