Bonjour

Envoyé par
saradenantes
je comprends rien
quel est le probleme svp?
Pour compléter la réponse de umfred, si tu as une arborescence de ce type...
main.py
toto/xxx.py
toto/yyy.py
... et que tu appelles "main.py", alors Python s'exécute depuis cet emplacement. Il verra le dossier "toto" et tu peux alors importer from toto import xxx ou import toto.xxx. Et si "xxx.py" a besoin, pour travailler, de yyy.py, vu que "xxx" est appelé depuis "main", alors il fait partie du programme "main" et s'il veut importer yyy il devra demander from toto import yyy ou import toto.yyy.
Mais si maintenant tu appelles "xxx.py" pour le tester, comme s'il était un code indépendant, alors Python n'est plus au niveau de "main.py" mais de "xxx.py". Là le dossier "toto" n'est pas vu puisque là tu es dans ce dossier. Et l'import alors doit se faire via import yyy ou from yyy import *.
Tu peux toutefois détecter si "xxx" est importé ou exécuté via la variable __name__ qui vaut "__main__" s'il est exécuté. Donc tu peux coder "si je me trouve en l'état d'exécution alors il me faut rajouter .. dans sys.path afin de pouvoir continuer à voir toto".
Ainsi "xxx.py" pourrait se coder ainsi
1 2 3 4 5
| if __name__ == "__main__":
import sys
sys.path.append("..")
# if
from toto import yyy |
Et là ça fonctionnera dans les deux cas (xxx importé/xxx exécuté).
A appliquer à ton projet.
Partager