Python3 problème d'import Le sujet est résolu

Tout ce qui concerne la programmation.
Message
Auteur
Avatar de l’utilisateur
PengouinPdt
Contributeur
Contributeur
Messages : 1307
Inscription : 23 avr. 2016, 23:37
Localisation : 47/FR
Diaspora* : https://framasphere.org/u/hucste
Contact :
Status : Hors-ligne

Python3 problème d'import

#1 Messagepar PengouinPdt » 02 mars 2018, 13:40

Bonjour,

J'ai un problème d'import de "modules" avec Python3.

Mon architecture :

Code : Tout sélectionner

test.py
/modules/__init__.py
/modules/config.py
/modules/notification.py
J'arrive à importer depuis le script 'test.py', le script 'config.py'.

Un "from modules import config", dans le script 'test.py' fonctionne très bien.

Mais le code suivant dans le script 'config.py' ne fonctionne pas :

Code : Tout sélectionner

try:
    from modules import notification
except ImportError:
    print(f'Cant import notification module onto Config')
    sys.exit(1)
Lors de l'exécution, la console Python m'avertit qu'il ne peut importer le module 'notification' dans 'config', tel que :
Cant import notification module onto Config
Soit, je m'y prends mal... ce qui m'est sûr, c'est qu'en py2, ça fonctionne correct !
Donc, il y a quelque chose que j'ai du mal comprendre...
mais quoi ? une idée ?

Merci d'avance.

----

PS : Pour info, le script '__ini_.py' renferme ce code - bien pratique ; mais je sais qu'il peut être vide, sans soucis - :

Code : Tout sélectionner

import glob
import os

dirname = os.path.dirname(os.path.abspath(__file__))

files = glob.glob(dirname + '/*.py')

liste = []

me = os.path.basename(__file__)

for fich in files:
    (path, File) = os.path.split(fich)
    if os.path.isfile(fich) and File != me:
        (name, ext) = os.path.splitext(File)
        if name != '__init__' and not name in liste:
            liste.append(name)

__all__ = liste
PengouinPdt { le seul, le vrai } ~ " Libre as a Pengouin "
- DIY - Debian Sid
----
Ne réponds pas aux PM d'assistance

Avatar de l’utilisateur
thuban
Contributeur
Contributeur
Messages : 67
Âge : 68
Inscription : 07 mai 2016, 15:32
Contact :
Status : Hors-ligne

Re: Python3 problème d'import

#2 Messagepar thuban » 02 mars 2018, 21:34

Code : Tout sélectionner

 import .notification

?

Avatar de l’utilisateur
thuban
Contributeur
Contributeur
Messages : 67
Âge : 68
Inscription : 07 mai 2016, 15:32
Contact :
Status : Hors-ligne

Re: Python3 problème d'import

#3 Messagepar thuban » 02 mars 2018, 21:34

tout dépend aussi d'où tu lances ton fichier .py.

Avatar de l’utilisateur
PengouinPdt
Contributeur
Contributeur
Messages : 1307
Inscription : 23 avr. 2016, 23:37
Localisation : 47/FR
Diaspora* : https://framasphere.org/u/hucste
Contact :
Status : Hors-ligne

Re: Python3 problème d'import

#4 Messagepar PengouinPdt » 02 mars 2018, 21:56

le fichier 'test.py' depuis sa racine, ni plus ni moins !
le script 'config.py' n'est pas appelé directement...
apparement, j'ai du mal à m'exprimer ?!

'config.py' est appelé par 'test.py' et appelle le script 'notification.py' !
PengouinPdt { le seul, le vrai } ~ " Libre as a Pengouin "
- DIY - Debian Sid
----
Ne réponds pas aux PM d'assistance

Avatar de l’utilisateur
PengouinPdt
Contributeur
Contributeur
Messages : 1307
Inscription : 23 avr. 2016, 23:37
Localisation : 47/FR
Diaspora* : https://framasphere.org/u/hucste
Contact :
Status : Hors-ligne

Re: Python3 problème d'import

#5 Messagepar PengouinPdt » 02 mars 2018, 21:59

thuban a écrit :
02 mars 2018, 21:34

Code : Tout sélectionner

 import .notification

?
"Invalid syntaxe !" est le message d'erreur retourné !
PengouinPdt { le seul, le vrai } ~ " Libre as a Pengouin "
- DIY - Debian Sid
----
Ne réponds pas aux PM d'assistance

Avatar de l’utilisateur
Arnaud
Membre
Membre
Messages : 156
Inscription : 23 avr. 2016, 14:31
Localisation : Allemagne
Status : Hors-ligne

Re: Python3 problème d'import

#6 Messagepar Arnaud » 03 mars 2018, 09:32

Est-ce que le fichier test.py est lancé avec l'option -m ?

Code : Tout sélectionner

python3 -m test.py

Avatar de l’utilisateur
PengouinPdt
Contributeur
Contributeur
Messages : 1307
Inscription : 23 avr. 2016, 23:37
Localisation : 47/FR
Diaspora* : https://framasphere.org/u/hucste
Contact :
Status : Hors-ligne

Re: Python3 problème d'import

#7 Messagepar PengouinPdt » 03 mars 2018, 11:39

non ?
Il est exécuté depuis IDLE... ou dans un terminal, mais jamais utilisé cette option.

Pourquoi il faudrait que j'exécute avec l'option '-m' ?

Code : Tout sélectionner

$ python3 -m test.py                                                                                   
/usr/local/bin/python3: Error while finding module specification for 'test.py' (AttributeError: module 'test' has no attribute '__path__')
Tiens, bizarre cette erreur, que je n'obtiens pas en l'exécutant normalement !?!
PengouinPdt { le seul, le vrai } ~ " Libre as a Pengouin "
- DIY - Debian Sid
----
Ne réponds pas aux PM d'assistance

Avatar de l’utilisateur
Arnaud
Membre
Membre
Messages : 156
Inscription : 23 avr. 2016, 14:31
Localisation : Allemagne
Status : Hors-ligne

Re: Python3 problème d'import

#8 Messagepar Arnaud » 03 mars 2018, 12:53

L'option m permet d'importer implicitement un package et d'exécuter chaque composant comme un script. Je ne suis pas sûr que cela résolve ton problème, mais je me demande si ce n'est pas lié.
L'erreur que tu mentionnes est probablement liée au fait que PYTHONPATH ne soit pas renseigné correctement.

Quelques explications ici : https://stackoverflow.com/questions/222 ... ion-or-not

( en anglais )

Avatar de l’utilisateur
PengouinPdt
Contributeur
Contributeur
Messages : 1307
Inscription : 23 avr. 2016, 23:37
Localisation : 47/FR
Diaspora* : https://framasphere.org/u/hucste
Contact :
Status : Hors-ligne

Re: Python3 problème d'import

#9 Messagepar PengouinPdt » 03 mars 2018, 13:45

Je voudrais bien voir que j'ai un problème de path !!!
(étant donné comment semble fonctionner Py3)

Ci-dessous les liens vers mon dépôt framagit :
- Le fichier test.py - dont l'inclusion du module "config" se fait ligne 359
- Le fichier config.py - dont l'inclusion, entres autres du script notification.py, se fait quasiment dès le début, cf lignes 22 à 26 !
PengouinPdt { le seul, le vrai } ~ " Libre as a Pengouin "
- DIY - Debian Sid
----
Ne réponds pas aux PM d'assistance

Avatar de l’utilisateur
Arnaud
Membre
Membre
Messages : 156
Inscription : 23 avr. 2016, 14:31
Localisation : Allemagne
Status : Hors-ligne

Re: Python3 problème d'import

#10 Messagepar Arnaud » 03 mars 2018, 17:18

Bon, en jetant un oeil rapidement sur ton code, on voit que ma réponse ne pourra pas t'aider. Est-ce que je me trompe en pensant que tu essayes d'adapter un code Python2 en Python3 ?

Le try ... except ... sur l'import va capturer toutes les erreurs provoquées lors de l'import du fichier notification.py. En mettant ton propre message d'erreur, tu ne voies pas apparaître les réelles erreurs.
Et la première dépendance apparaît au début du fichier : as-tu installé le module pynotify dans la version 3 ?

Avatar de l’utilisateur
PengouinPdt
Contributeur
Contributeur
Messages : 1307
Inscription : 23 avr. 2016, 23:37
Localisation : 47/FR
Diaspora* : https://framasphere.org/u/hucste
Contact :
Status : Hors-ligne

Re: Python3 problème d'import  Le sujet est résolu

#11 Messagepar PengouinPdt » 03 mars 2018, 23:45

Ahahhh, bien vu @Arnaud !
Et, en effet, j'ai beau avoir le package 'py-notify', ce n'est pas pour Py3 !

Remplacement par notify2

Merci :D
PengouinPdt { le seul, le vrai } ~ " Libre as a Pengouin "
- DIY - Debian Sid
----
Ne réponds pas aux PM d'assistance


Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité