FORUMS PROFESSIONNELSWINDEV , WEBDEV et WINDEV Mobile
Débuté par Florian, 26 mar. 2025 09:08 - 3 réponses
Posté le 26 mars 2025 - 09:08
Bonjour à tous, Ayant besoin d'intégrer un module Python dans Windev, je me suis pour la première fois intéressé aux fonctionnalités concernées. Je me heurte malheureusement à un problème, classique et facile à résoudre en Python, mais que je n'arrive définitivement pas à solutionner en Windev: les imports relatifs. Les deux erreurs Python concernées: 1. attempted relative import beyond top-level package 2. attempted relative import with no known parent package Le contexte est le suivant. J'ai créé un script Python, qu'on va appeler monscript.py. Pour faire fonctionner ce module, j'ai besoin d'importer une fonction d'un module téléchargé sur Hugging Face, qu'on va appeler ici HFmodule. Tous mes modules téléchargés se trouvent dans mon disque D:, dans un répertoire "site-packages" On retrouve donc un répertoire site-packages/HFmodule qui contient tous les scripts et fichiers du module HFmodule. Voici ce que j'ai fait: 1. J'ai renseigné la DLL Python dans les options de Windev 2. J'ai ajouté le répertoire site-packages en tant que répertoire des bibliothèques externes Python dans la configuration de mon projet 3. J'ai créé un bouton avec PythonInitialise pour tester mon script Jusque-là tout va bien. Si j'importe un script basique pour afficher un Hello world, aucun problème. Par contre, si j'importe monscript.py qui contient un import de la fonction Fonction1 du module HFmodule ("from HFmodule import Fonction1"), j'ai systématiquement une erreur d'import relatif. J'ai tout essayé: déplacer monscript.py dans le répertoire site-packages et autres répertoires parents, importer le module HFmodule directement dans Windev, changer la forme de l'import relatif... rien n'y fait. Je sais qu'il faudrait normalement indiquer à Python de considérer monscript.py comme faisant partie d'un package pour pouvoir utiliser l'import relatif, mais comment faire dans Windev où tout n'est finalement que boîte noire? Les deux seules manières d'exécuter un script sont les appels natifs et la fonction PythonExecute. Avez-vous déjà réussi à importer dans Windev un script qui doit lui-même importer une fonction d'un autre module? Si oui comment? Merci d'avance pour tout ceux qui prendront le temps de me lire et de me répondre. Excellente journée, Florian
Membre enregistré 11 messages
Posté le 26 mars 2025 - 10:54
Florian a écrit : Bonjour à tous, Ayant besoin d'intégrer un module Python dans Windev, je me suis pour la première fois intéressé aux fonctionnalités concernées. Je me heurte malheureusement à un problème, classique et facile à résoudre en Python, mais que je n'arrive définitivement pas à solutionner en Windev: les imports relatifs. Les deux erreurs Python concernées: 1. attempted relative import beyond top-level package 2. attempted relative import with no known parent package Le contexte est le suivant. J'ai créé un script Python, qu'on va appeler monscript.py. Pour faire fonctionner ce module, j'ai besoin d'importer une fonction d'un module téléchargé sur Hugging Face, qu'on va appeler ici HFmodule. Tous mes modules téléchargés se trouvent dans mon disque D:, dans un répertoire "site-packages" On retrouve donc un répertoire site-packages/HFmodule qui contient tous les scripts et fichiers du module HFmodule. Voici ce que j'ai fait: 1. J'ai renseigné la DLL Python dans les options de Windev 2. J'ai ajouté le répertoire site-packages en tant que répertoire des bibliothèques externes Python dans la configuration de mon projet 3. J'ai créé un bouton avec PythonInitialise pour tester mon script Jusque-là tout va bien. Si j'importe un script basique pour afficher un Hello world, aucun problème. Par contre, si j'importe monscript.py qui contient un import de la fonction Fonction1 du module HFmodule ("from HFmodule import Fonction1"), j'ai systématiquement une erreur d'import relatif. J'ai tout essayé: déplacer monscript.py dans le répertoire site-packages et autres répertoires parents, importer le module HFmodule directement dans Windev, changer la forme de l'import relatif... rien n'y fait. Je sais qu'il faudrait normalement indiquer à Python de considérer monscript.py comme faisant partie d'un package pour pouvoir utiliser l'import relatif, mais comment faire dans Windev où tout n'est finalement que boîte noire? Les deux seules manières d'exécuter un script sont les appels natifs et la fonction PythonExecute. Avez-vous déjà réussi à importer dans Windev un script qui doit lui-même importer une fonction d'un autre module? Si oui comment? Merci d'avance pour tout ceux qui prendront le temps de me lire et de me répondre. Excellente journée, Florian
Membre enregistré 11 messages
Posté le 26 mars 2025 - 10:54
Puisque WinDev limite les options d’exécution, la clé est de contourner les imports relatifs et de s’assurer que Python peut résoudre les imports absolus correctement. Voici les étapes : 1. Utiliser des imports absolus dans monscript.py Modifiez monscript.py pour utiliser un import absolu au lieu d’un import relatif : python # monscript.py from HFmodule import Fonction1 def ma_fonction(): resultat = Fonction1() print(resultat) ma_fonction() Un import absolu (from HFmodule import Fonction1) ne dépend pas du contexte de package et fonctionnera tant que D:\site-packages est dans sys.path. Évitez les points (.) dans l’import, car ils indiquent un import relatif. 2. Vérifier et ajuster sys.path dans le script Pour garantir que Python trouve HFmodule, ajoutez explicitement D:\site-packages à sys.path au début de monscript.py : python # monscript.py import sys sys.path.append("D:/site-packages") # Chemin absolu vers site-packages from HFmodule import Fonction1 def ma_fonction(): resultat = Fonction1() print(resultat) ma_fonction() Cela force Python à inclure D:\site-packages dans les chemins de recherche des modules, même si WinDev ne le fait pas correctement via la configuration.
Posté le 26 mars 2025 - 16:18
Merci beaucoup pour votre réponse détaillée, je vais essayer ça et je confirmerai si c'est bon! Excellente journée, Florian