Skip to content

Argasar-O/Codingame-python-compactor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Python CodinGame Compactor

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).

Fonctionnement

  1. Part du fichier d'entrée (src/main.py par défaut)
  2. Résout récursivement les imports locaux via l'AST Python
  3. Trie les fichiers en ordre topologique (dépendances d'abord)
  4. Supprime les imports locaux, conserve les imports stdlib/tiers
  5. Hoist tous les imports externes en haut du fichier de sortie (dédupliqués)
  6. Produit un fichier .py unique et valide

Structure attendue

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

# 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

Options

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

Exemple

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.

Imports supportés

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.

Prérequis

  • Python 3.10+
  • Aucune dépendance externe (stdlib uniquement)

About

Python code compactor

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages