J'essaie de faire une importation simple et d'utiliser la bibliothèque tierce de messagerie électronique.
Selon leur documentation, la façon d'utiliser leur bibliothèque est la suivante:
pip install emailage-official
Ensuite, importez simplement avec:
from emailage.client import EmailageClient
L'installation fonctionne bien avec pip - aucune erreur. J'ai revérifié pour voir que le package de messagerie existe dans le bon répertoire, et c'est le cas.
Le package existe sur:
C:\Users\aaron\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\emailage
Ce dossier contient (apparemment) les fichiers corrects avec un __init__.py
et tout. Cependant, le pylint et l'interpréteur de ligne de commande me lancent un 'Aucun module nommé' emailage.client '; 'emailage' n'est pas une erreur de package.
La sortie de mon sys.path
est:
[...
'C:\\Users\\aaron\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages'
...
]
Donc, le répertoire où l'emailage est installé fait partie du chemin ... et enfin j'ai installé numpy par pip juste pour tester s'il fonctionnait correctement. Numpy est installé dans le même dossier de packages de site que l'emailage, et cela fonctionne bien lorsqu'il est importé, donc je suis bloqué.
Je n'utilise généralement pas Python beaucoup, donc toute aide serait appréciée.
Le problème était dans le nom de mon fichier.
J'ai nommé mon fichier à la hâte emailage.py
puis a essayé d'importer à partir de emailage.client
.
Je suppose que Python a regardé dans mon répertoire actuel et correspondait aux noms du fichier sur lequel je travaillais avant de vérifier les bibliothèques tierces installées.
Après avoir renommé mon fichier, tout semble correct.
Pour ceux qui rencontrent des problèmes similaires - attention aux noms conflictuels. Parfois, les choses les plus simples vous font trébucher le plus longtemps.
Je suis tombé sur quelque chose de similaire et la réponse d'OP à propos de la collision d'espace de noms est ce qui m'a finalement permis de comprendre.
J'utilisais le même nom pour un sous-package (répertoire) et un module (fichier) qu'il contient.
Par exemple, j'avais ceci:
/opt/mylib/myapi
/opt/mylib/myapi/__init__.py
/opt/mylib/myapi/myapi_creds.py # gitignored file for user/pass
/opt/mylib/myapi/myapi.py # base module, load creds and connect
/opt/mylib/myapi/myapi_dostuff.py # call myapi.py and do work
Le script 'myapi.py' importe les informations d'identification de myapi_creds.py via cette instruction:
from myapi.myapi_creds import my_user, my_pass
Le test du module 'myapi.py' a entraîné cette erreur:
$ ./myapi.py
Traceback (most recent call last):
File "./myapi.py", line 12, in <module>
from myapi.myapi_creds import my_user, my_pass
File "/opt/mylib/myapi/myapi.py", line 12, in <module>
from myapi.myapi_creds import my_user, my_pass
ModuleNotFoundError: No module named 'myapi.myapi_creds'; 'myapi' is not a package
La solution était de renommer myapi.py
à myapi_base.py
donc son nom n'entre pas en collision avec le nom du sous-package.
J'ai jeté un œil à ce problème, et même si ce n'est pas exactement la même erreur que j'ai rencontrée, cela m'a aidé à le résoudre. Je vais expliquer la situation que j'ai eue, car je pense que certains utilisateurs pourraient trouver cela pratique. Donc, j'obtenais le journal des erreurs suivant:
Traceback (most recent call last):
File "/home/kemal/Programming/Python/Preference_Articulation/LocalSearch/LS_apriori.py", line 1, in <module>
from LocalSearch.LocalSearch import LocalSearch
ModuleNotFoundError: No module named 'LocalSearch.LocalSearch'; 'LocalSearch' is not a package
La structure de mon projet est la suivante (en utilisant PyCharm): Vue de la structure du projet
La chose importante à noter est que j'ai séparé mon code en plusieurs dossiers, car il le rend plus lisible. Maintenant, dans le dossier nommé LocalSearch J'ai 4 fichiers, LocalSearch, LS_apriori et environ 2 fichiers de tests (sans objet). En essayant d'exécuter le fichier LS_apriori (qui utilise des méthodes et des classes du fichier LocalSearch), j'obtenais l'erreur fournie ci-dessus. Le code en particulier n'est pas important, et la façon dont j'ai géré les importations était la suivante:
from LocalSearch.LocalSearch import LocalSearch
La solution était simple. J'ai renommé le fichier py LocalSearch en Local_Search (je viens d'ajouter un trait de soulignement ). Ensuite, l'erreur a disparu.
Donc mon problème était de posséder un dossier (package) avec le même nom qu'un fichier (module) à l'intérieur, qui a une classe à l'intérieur avec le même nom. Python n'aimait pas ça. Avoir des modules avec le même nom que des packages à l'intérieur est très bien cependant, je suppose que la classe vient d'ajouter une confusion supplémentaire.