RandomWordsインストール時の「モジュールが見つかりません」エラー解決法
問題説明
Python 3.12.4とpip 24.2環境でpip install RandomWords
を実行すると、以下のエラーが発生します:
bash
Preparing metadata (setup.py) ... error
error: subprocess-exited-with-error
...
from setuptools.command.test import test as TestCommand
ModuleNotFoundError: No module named 'setuptools.command.test'
エラーの詳細表示
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
原因
RandomWordsパッケージが古い設計に依存しているため:
python
# RandomWordsのsetup.py(問題のあるコード)
from setuptools.command.test import test as TestCommand
2024年7月28日リリースのsetuptools 72.0.0
でsetuptools.command.test
モジュールが廃止された結果発生する互換性問題です(削除コミット)。
解決方法
⚠️ 最新状況(推奨解決策)
setuptools 72.0.0
は2024年8月1日現在公式に破棄(yanked) されています:
- PyPIリポジトリ: https://pypi.org/project/setuptools/72.0.0/#history
- 推奨対応: パッケージ再インストールを試行bash
pip install --force-reinstall setuptools pip install RandomWords # 正常にインストール可能
以前の解決策を使う場合
破棄前に対処されたインストール環境がある場合は、以下いずれかの方法で対応
方法1: setuptoolsのバージョン制限(汎用)
setuptoolsを72未満のバージョンに固定:
bash
pip install 'setuptools<72.0.0'
pip install RandomWords # 以降正常動作
方法2: 環境変数でのバージョン制限(Docker/Poetry向け)
constraints.txt
ファイルでバージョン制約:
bash
echo "setuptools<72" > constraints.txt
export PIP_CONSTRAINT=$(pwd)/constraints.txt
その後、通常通りパッケージをインストール:
bash
pip install RandomWords
方法3: Poetryユーザー向けワークアラウンド
poetry install
が制約を無視する場合の対応:
bash
poetry export -o requirements.txt
poetry export -o constraints.txt -f constraints.txt
PIP_CONSTRAINT="$(pwd)/constraints.txt" poetry run pip install -r requirements.txt
技術的背景と詳細
なぜ発生したか
setuptools 72.0.0で非推奨モジュールが完全削除されましたが:
根本解決に向けて
パッケージ管理者側でsetup.py
を更新する必要あり。代替コード例:
python
# 修正後の推奨コード(pytest使用例)
import pytest
from setuptools import setup
setup(
...,
extras_require={'test': ['pytest']},
tests_require=['pytest'],
cmdclass={'test': pytest}
)
予防的対策
- 環境隔離:
venv
やpipenv
でプロジェクト毎に依存関係を分離bashpython -m venv .venv source .venv/bin/activate
- バージョン固定:
requirements.txt
に明示的なバージョン指定setuptools==71.0.0 RandomWords==0.3.0
- 更新前の検証: 主要パッケージ更新時はテスト環境で動作確認を実施
結論
問題の本質はsetuptools 72.0.0
の一時的な互換性破壊です。現在は公式リポジトリで当該バージョンが破棄されているため:
- まずは
pip install --upgrade setuptools
を試行 - 解決しない場合は
setuptools<72
のバージョン制限を適用 - パッケージ管理者が更新を実施するまで一時的なワークアラウンドとして運用
パッケージ更新状況はGitHub Issueで追跡可能: