Skip to content

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.0setuptools.command.testモジュールが廃止された結果発生する互換性問題です(削除コミット)。

解決方法

⚠️ 最新状況(推奨解決策)

setuptools 72.0.0は2024年8月1日現在公式に破棄(yanked) されています:

以前の解決策を使う場合

破棄前に対処されたインストール環境がある場合は、以下いずれかの方法で対応

方法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で非推奨モジュールが完全削除されましたが:

  • 多くのパッケージ(例: ffmpy)が古いcommand.testに依存
  • 互換性維持のため削除は2024年11月15日まで延期変更履歴

根本解決に向けて

パッケージ管理者側でsetup.pyを更新する必要あり。代替コード例:

python
# 修正後の推奨コード(pytest使用例)
import pytest
from setuptools import setup

setup(
    ...,
    extras_require={'test': ['pytest']},
    tests_require=['pytest'],
    cmdclass={'test': pytest}
)

予防的対策

  1. 環境隔離: venvpipenvでプロジェクト毎に依存関係を分離
    bash
    python -m venv .venv
    source .venv/bin/activate
  2. バージョン固定: requirements.txtに明示的なバージョン指定
    setuptools==71.0.0
    RandomWords==0.3.0
  3. 更新前の検証: 主要パッケージ更新時はテスト環境で動作確認を実施

結論

問題の本質はsetuptools 72.0.0の一時的な互換性破壊です。現在は公式リポジトリで当該バージョンが破棄されているため:

  1. まずはpip install --upgrade setuptoolsを試行
  2. 解決しない場合はsetuptools<72のバージョン制限を適用
  3. パッケージ管理者が更新を実施するまで一時的なワークアラウンドとして運用

パッケージ更新状況はGitHub Issueで追跡可能: