Skip to content

ModuleNotFoundError: 'jupyter_server.contents' モジュールが見つからない問題の解決法

問題の詳細

Jupyter Notebookを起動しようとすると、次のエラーが発生します:

python
ModuleNotFoundError: No module named 'jupyter_server.contents'
...
TypeError: warn() missing 1 required keyword-only argument: 'stacklevel'

このエラーは通常、以下の状況で発生します:

  • Jupyter関連パッケージのバージョン互換性の問題
  • インストール済みパッケージの破損や依存関係の不整合
  • 特定バージョンのtraitletsパッケージとの非互換性

エラーの根本原因はnotebookパッケージとtraitletsパッケージ間のバージョン競合であり、特にnotebook v5.10.0で顕著に報告されています。

解決方法

以下の解決策は実際の開発コミュニティで検証済みです。問題の原因によって異なるアプローチを試してください。

方法1: notebookを互換性のあるバージョンに更新(推奨)

最新の安定版で問題が解決しない場合、notebookのバージョンを6.5.6に固定:

bash
pip install notebook==6.5.6

またはキャッシュを無視してインストール:

bash
pip install --upgrade --no-cache-dir notebook==6.*

なぜこのバージョンか?

このバージョンではjupyter_server.contentsモジュールの参照方法が修正され、依存関係の問題が解決されています。コミュニティの多数の報告で効果が確認されています。

方法2: traitletsをダウングレード(代替案)

notebookの更新が不可能な場合の代替策:

bash
pip uninstall traitlets
pip install traitlets==5.9.0

注意

この方法は一時的な回避策です。長期的には方法1の実施を推奨します。traitletsの過旧バージョンは他のパッケージと競合する可能性があります。

解決後の動作確認

インストール後、次のコマンドでJupyter Notebookが正常起動するか確認:

bash
jupyter notebook

正常に起動すればターミナルに以下が表示:

[I 2024-05-10 12:34:56.123 ServerApp] Jupyter Server 1.24.0 is running at...

根本原因と予防策

このエラーの主な要因は:

  1. 依存関係の破壊的変更: traitlets v5.10.0 に導入された変更がnotebookの古いバージョンと非互換
  2. パッケージ管理の問題: pipcondaでの部分的な更新が依存関係ツリーを破損

再発防止のためには

  • 定期的なパッケージ更新: pip install --upgrade notebook jupyter
  • 環境の分離: Anacondaやvenvでプロジェクト毎に環境を隔離
  • バージョン固定: requirements.txtにメジャーバージョンを明記
python
# 推奨設定例
notebook>=6.5.6,<7.0
traitlets>=5.9.0,<6.0

補足情報

  • 公式GitHub Issueで最新の進展を確認可能
  • Anacondaユーザーはconda update --allで全パッケージを一括更新
  • キャッシュが原因の場合は削除: pip cache purge