コンテンツにスキップ

Dependency Management Guide

[!NOTE] 最新の実装状況は 機能実装ステータス (Remaining Functionality) を参照してください。

Overview

EvoSpikeNetの依存関係管理は、セキュリティと安定性を重視した多層アプローチを採用しています。

依存関係の構造

Core Dependencies (pyproject.toml)

プロジェクトの依存関係はpyproject.tomlで管理され、以下のカテゴリに分類されています:

  1. Core utilities: ファイルロック、進捗表示、システムモニタリング
  2. Data processing: NumPy, Pandas, SciPy, H5Py
  3. ML/AI frameworks: PyTorch, SNNTorch, Transformers
  4. Visualization: Plotly, Matplotlib, Dash
  5. Networking: NetworkX, BeautifulSoup
  6. Databases: Milvus, Elasticsearch, PostgreSQL
  7. Web frameworks: FastAPI, Uvicorn
  8. NLP: Janome, Tiktoken, SentencePiece
  9. Audio/Image: Librosa, Pillow
  10. Optimization: Optuna, Flwr

Version Constraints

すべての依存関係は明確なバージョン範囲で指定されています:

"torch>=2.0.0,<2.6"  # Major version固定、minor version更新可能
"numpy>=1.24.0,<2.3"  # 互換性維持

原則: - 下限: 必要な機能が含まれる最小バージョン - 上限: テスト済みの最新バージョン + マイナー1-2バージョンのバッファ - Major version変更は慎重に評価

Dependabot設定

自動更新戦略

.github/dependabot.ymlで以下を設定:

- package-ecosystem: "pip"
  schedule:
    interval: "weekly"
    day: "monday"
    time: "09:00"
  groups:
    pytorch:  # 互換性が重要なパッケージをグループ化
      patterns:
        - "torch*"
        - "snntorch"

グループ化戦略: - PyTorch ecosystem: torch, torchvision, torchaudio, snntorch - Data processing: numpy, pandas, scipy - Web frameworks: fastapi, uvicorn, dash - Database: pymilvus, elasticsearch, psycopg2, SQLAlchemy - Testing: pytest関連 - Dev tools: black, isort, flake8, mypy

Pull Request管理

  • 週次チェック(月曜日 9:00 JST)
  • 最大10個のPRまで同時オープン
  • 自動ラベル付与: dependencies, python
  • レビュアー自動割り当て

定期更新ワークフロー

GitHub Actions: dependency-update.yml

毎週月曜日に実行され、以下をチェック:

  1. Outdated packages: pip list --outdated
  2. Security vulnerabilities: pip-audit
  3. Safety check: CVEデータベース照合
  4. Test compatibility: 最新バージョンでのテスト実行

自動Issue作成

5個以上の更新可能パッケージがある場合、自動的にIssueを作成:

## Weekly Dependency Update Report

### Outdated Dependencies
[リスト]

### Security Vulnerabilities
[リスト]

### Action Items
- [ ] Review outdated packages
- [ ] Address security vulnerabilities
- [ ] Update pyproject.toml

手動更新プロセス

1. 現在の状態確認

# 古いパッケージの確認
pip list --outdated

# セキュリティチェック
pip-audit

# 依存関係ツリー
pipdeptree

2. pyproject.toml更新

# バージョン範囲を調整
vim pyproject.toml

3. ロックファイル生成

# 自動生成スクリプト使用
python scripts/update_requirements.py

# または手動でpip-compile実行
pip-compile --resolver=backtracking --output-file=requirements.txt pyproject.toml

4. テスト実行

# 仮想環境で新しい依存関係をインストール
python -m venv test_env
source test_env/bin/activate
pip install -r requirements.txt

# テスト実行
pytest tests/ -v

# 互換性チェック
python -c "import evospikenet; print('✓ Import successful')"

5. コミットとPush

git add pyproject.toml requirements*.txt
git commit -m "chore(deps): update dependencies to latest compatible versions"
git push origin feature/update-dependencies

Requirements Files

requirements.txt

  • 本番環境用の固定バージョン
  • pip-compilepyproject.tomlから自動生成
  • すべての推移的依存関係を含む

requirements-dev.txt

  • 開発ツール含む(black, mypy, pytest等)
  • pip-compile --extra=devで生成

requirements-test.txt

  • テストのみに必要な依存関係
  • CI/CDで使用

requirements-cpu.txt / requirements-gpu.txt

  • CPU専用/GPU専用の依存関係
  • PyTorchのCPU/CUDA版を区別

セキュリティベストプラクティス

1. 定期的なセキュリティスキャン

# pip-audit(推奨)
pip-audit

# safety
safety check

# bandit(コードスキャン)
bandit -r evospikenet/

2. 脆弱性対応フロー

  1. 検出: Dependabotまたは週次スキャンで発見
  2. 評価: CVSSスコア、影響範囲を確認
  3. 修正:
  4. Critical/High: 即座に対応(24時間以内)
  5. Medium: 1週間以内
  6. Low: 次回定期更新時
  7. テスト: 修正後の回帰テスト
  8. デプロイ: ホットフィックスまたは定期リリース

3. 信頼できるソース

  • PyPI公式リポジトリのみ使用
  • パッケージ署名検証(可能な場合)
  • 主要パッケージはハッシュ検証

トラブルシューティング

依存関係の競合

# 詳細な競合情報
pip install --dry-run --report report.json -r requirements.txt

# 依存関係グラフ確認
pipdeptree --warn conflict

バージョン固定の緩和

一時的な解決策として、特定パッケージのバージョン制約を緩和:

# Before
"package>=1.0.0,<1.5"

# After (一時的に上限削除)
"package>=1.0.0"

注意: テスト後は必ず適切な上限を設定

Python version互換性

# 複数のPythonバージョンでテスト
tox

# または手動で
for v in 3.10 3.11 3.12; do
  python$v -m venv env$v
  source env$v/bin/activate
  pip install -r requirements.txt
  pytest tests/
  deactivate
done

Continuous Integration

GitHub Actions連携

- name: Install dependencies
  run: |
    pip install -r requirements.txt

- name: Cache dependencies
  uses: actions/cache@v4
  with:
    path: ~/.cache/pip
    key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}

Pre-commit hooks

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/Lucas-C/pre-commit-hooks-safety
    rev: v1.3.1
    hooks:
      - id: python-safety-dependencies-check

メンテナンススケジュール

タスク 頻度 担当
Dependabot PR確認 週次(月曜) 開発チーム
セキュリティスキャン 週次(月曜) 自動 + レビュー
Major version更新 四半期ごと Tech Lead
依存関係クリーンアップ 半年ごと 全チーム
ドキュメント更新 バージョン更新時 担当者

参考リソース