Voici une solution: une section a été ajoutée pour le code python commun entre les sujets, ce qui peut être pratique pour réduire le temps de compilation.
Fichier principal `sujetsmaker.tex`:
\documentclass{article}
\usepackage{tikz}
\ExplSyntaxOn
\clist_new:N \l_mumblee_clist
\clist_set:Nn \l_mumblee_clist {section,subsection,exo,page}% compteurs à initialiser
\newtheorem{exo}{Exercice}% pour l'exemple
\newcounter{sujetcnt}% pour l'exemple
\NewDocumentEnvironment{sujet}{ }
{
\newpage
\clist_map_inline:Nn \l_mumblee_clist {\setcounter{##1}{0}}
\stepcounter{sujetcnt}\stepcounter{page}
\section*{Sujet~no~\thesujetcnt}
}{}
\cs_new_eq:NN \mumbleerepeat \prg_replicate:nn
\ExplSyntaxOff
\usepackage{pythontex}
% code python commun
\begin{pycode}
from random import randint
\end{pycode}
\begin{document}
\mumbleerepeat{5}{\input{txtsujet}}
\end{document}
\input{txtsujet}
\end{document}
Fichier avec le contenu de sujet `txtsujet.tex`
\begin{sujet}
\begin{exo}
\begin{pycode}
a,b = randint(1,5),randint(6,10)
\end{pycode}
Calculer $\py{a}+\py{b}$
\end{exo}
\end{sujet}
Pour la compilation
<pre><code>latex sujetsmaker
pythontex sujetsmaker
latex sujetsmaker</pre></code>