Compile un projet Python multi-fichiers en un seul fichier prêt à être soumis sur CodinGame.
Équivalent Python du bundle.sh utilisé pour les projets TypeScript, compatible Windows (script Python pur, aucune dépendance externe).
- Part du fichier d'entrée (
src/main.pypar défaut) - Résout récursivement les imports locaux via l'AST Python
- Trie les fichiers en ordre topologique (dépendances d'abord)
- Supprime les imports locaux, conserve les imports stdlib/tiers
- Hoist tous les imports externes en haut du fichier de sortie (dédupliqués)
- Produit un fichier
.pyunique et valide
mon-projet/
├── bundle.py ← Le compactor (ce script)
├── solution.py ← Fichier généré (à copier sur CodinGame)
└── src/
├── main.py ← Point d'entrée
├── game.py
└── models/
├── position.py
└── game_map.py
# Utilisation par défaut : src/main.py → solution.py
python bundle.py --out solution.py
# Spécifier un autre dossier source et point d'entrée
python bundle.py --src mon_dossier --entry app.py --out output.py
# Aide
python bundle.py --help| Option | Défaut | Description |
|---|---|---|
--src |
src |
Dossier contenant les sources |
--entry |
main.py |
Fichier d'entrée (relatif à --src) |
--out |
bundle.py |
Fichier de sortie |
Avec cette structure :
src/
├── main.py → from game import Game
├── game.py → from models.position import Position
└── models/
└── position.py → import sys
La commande python bundle.py --out solution.py produit :
import sys
class Position:
...
class Game:
...
game = Game()
game.loop()Les imports locaux (from game import Game, from models.position import Position) sont supprimés.
Les imports externes (import sys) sont regroupés et dédupliqués en haut du fichier.
| Type d'import | Local (supprimé) | Externe (conservé) |
|---|---|---|
from game import Game |
✓ | |
from models.pos import Pos |
✓ | |
from .utils import helper |
✓ | |
import sys |
✓ | |
from typing import List |
✓ | |
from collections import deque |
✓ |
Un import est considéré local si le fichier .py correspondant existe dans le dossier source.
- Python 3.10+
- Aucune dépendance externe (stdlib uniquement)