Dependency Management Guide
[!NOTE] 最新の実装状況は 機能実装ステータス (Remaining Functionality) を参照してください。
Overview
EvoSpikeNetの依存関係管理は、セキュリティと安定性を重視した多層アプローチを採用しています。
依存関係の構造
Core Dependencies (pyproject.toml)
プロジェクトの依存関係はpyproject.tomlで管理され、以下のカテゴリに分類されています:
- Core utilities: ファイルロック、進捗表示、システムモニタリング
- Data processing: NumPy, Pandas, SciPy, H5Py
- ML/AI frameworks: PyTorch, SNNTorch, Transformers
- Visualization: Plotly, Matplotlib, Dash
- Networking: NetworkX, BeautifulSoup
- Databases: Milvus, Elasticsearch, PostgreSQL
- Web frameworks: FastAPI, Uvicorn
- NLP: Janome, Tiktoken, SentencePiece
- Audio/Image: Librosa, Pillow
- 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
毎週月曜日に実行され、以下をチェック:
- Outdated packages:
pip list --outdated - Security vulnerabilities:
pip-audit - Safety check: CVEデータベース照合
- 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-compileでpyproject.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. 脆弱性対応フロー
- 検出: Dependabotまたは週次スキャンで発見
- 評価: CVSSスコア、影響範囲を確認
- 修正:
- Critical/High: 即座に対応(24時間以内)
- Medium: 1週間以内
- Low: 次回定期更新時
- テスト: 修正後の回帰テスト
- デプロイ: ホットフィックスまたは定期リリース
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 |
| 依存関係クリーンアップ | 半年ごと | 全チーム |
| ドキュメント更新 | バージョン更新時 | 担当者 |