Python est installé dans un répertoire local.
Mon arborescence de répertoires ressemble à ceci:
(local directory)/site-packages/toolkit/interface.py
Mon code est ici:
(local directory)/site-packages/toolkit/examples/mountain.py
Pour exécuter l'exemple, j'écris python mountain.py
et dans le code j'ai:
from toolkit.interface import interface
Et je reçois l'erreur:
Traceback (most recent call last):
File "mountain.py", line 28, in ?
from toolkit.interface import interface
ImportError: No module named toolkit.interface
J'ai déjà vérifié sys.path
et là j'ai le répertoire /site-packages
. De plus, j'ai le fichier __init__.py.bin
dans le dossier toolkit pour indiquer à Python qu'il s'agit d'un package. J'ai également un __init__.py.bin
dans le répertoire d'exemples.
Je ne sais pas pourquoi Python ne peut pas trouver le fichier lorsqu'il se trouve sys.path
. Des idées? Peut-il s'agir d'un problème d'autorisations? Ai-je besoin d'une autorisation d'exécution?
python
importerror
python-import
Eduardo
la source
la source
755
. C'est parce queumask
la machine était en0027
raison de laquelle l'others
n'a pas eu l'read
autorisation module de ne pas être cause lu. L'ajout d'uneread
autorisation a résolu mon problème. Cela vaut la peine de vérifier l'autorisation du répertoire cible après l'installation.interface
(a été un conflit).Réponses:
Sur la base de vos commentaires sur le post d'Orip, je suppose que c'est ce qui s'est passé:
__init__.py
sur Windows.__init__.py
(maintenant appelé__init__.py.bin
) signifie que python ne comprend pas la boîte à outils en tant que package.__init__.py
dans le répertoire approprié et tout fonctionne ...?la source
.bin
.python driver.py
quand j'aurais dû utiliserpython3 driver.py
depuis que j'ai installé avecpip3
.Est-ce que
avoir un
__init__.py
?Pour importer de marche à travers vos répertoires tous les répertoires doit avoir un
__init__.py
fichier.la source
Je suis tombé sur quelque chose de très similaire lorsque j'ai fait cet exercice dans LPTHW; Je n'ai jamais pu faire reconnaître à Python que j'avais des fichiers dans le répertoire à partir duquel j'appelais. Mais j'ai finalement réussi à le faire fonctionner. Ce que j'ai fait et ce que je recommande, c'est d'essayer ceci:
(REMARQUE: d'après votre message initial, je suppose que vous utilisez une machine basée sur * NIX et que vous exécutez des choses à partir de la ligne de commande, donc ce conseil est adapté à cela. Puisque j'exécute Ubuntu, c'est ce que j'ai fait)
1) Modifiez le répertoire (cd) dans le répertoire au - dessus du répertoire où se trouvent vos fichiers. Dans ce cas, vous essayez d'exécuter le
mountain.py
fichier et essayez d'appeler letoolkit.interface.py
module, qui se trouvent dans des répertoires distincts. Dans ce cas, vous iriez dans le répertoire qui contient les chemins d'accès à ces deux fichiers (ou en d'autres termes, le répertoire le plus proche que les chemins d'accès de ces deux fichiers partagent). Qui dans ce cas est letoolkit
répertoire.2) Lorsque vous êtes dans le
tookit
répertoire, entrez cette ligne de code sur votre ligne de commande:export PYTHONPATH=.
Cela définit votre PYTHONPATH sur ".", Ce qui signifie essentiellement que votre PYTHONPATH recherchera maintenant tous les fichiers appelés dans le répertoire dans lequel vous vous trouvez actuellement (et plus précisément, dans les branches de sous-répertoire du répertoire dans lequel vous vous trouvez. Il ne recherche donc pas seulement dans votre répertoire actuel, mais dans tous les répertoires qui se trouvent dans votre répertoire actuel).
3) Après avoir défini votre PYTHONPATH à l'étape ci-dessus, exécutez votre module à partir de votre répertoire actuel (le
toolkit
répertoire). Python devrait maintenant trouver et charger les modules que vous avez spécifiés.J'espère que cela t'aides. J'étais assez frustré par cela moi-même.
la source
set PYTHONPATH=.
.Sur * nix, assurez-vous également que PYTHONPATH est correctement configuré, en particulier qu'il a ce format:
(Faites attention
.:
au début, afin qu'il puisse également effectuer une recherche dans le répertoire actuel.)Il peut également se trouver dans d'autres emplacements, selon la version:
la source
.:/usr/lib/python
,.:/usr/lib/python2.6
,.:/usr/lib/python2.7
et etc. , selon la version#!/usr/bin/python
à la fin d'un fichier devrait également fonctionner, non?J'ai résolu mon propre problème et j'écrirai un résumé des problèmes et de la solution:
Le fichier doit être appelé exactement
__init__.py
. Si l'extension est différente, comme dans mon cas,.py.bin
Python ne peut pas se déplacer dans les répertoires et ne peut pas trouver les modules. Pour modifier les fichiers, vous devez utiliser un éditeur Linux, tel que vi ou nano . Si vous utilisez un éditeur Windows, cela écrira des caractères cachés.Un autre problème qui l'affectait était que j'avais une autre version Python installée par la racine, donc si quelqu'un travaille avec une installation locale de python, assurez-vous que l'installation Python qui exécute les programmes est le Python local. Pour vérifier cela, faites
which python
-le et voyez si l'exécutable est celui qui se trouve dans votre répertoire local. Sinon, changez le chemin, mais assurez-vous que le répertoire Python local est antérieur à l'autre Python.la source
__init__.py
fichiers placés dans le répertoire approprié mais j'ai installé manuellement un package à l'aide desetup.py
. Comment l'installation d'un nouveau package aurait-elle pu interférer avec les importations?une solution simple est d'installer le module en utilisant
python -m pip install <library-name>
au lieu depip install <library-name>
vous pouvez utiliser sudo en cas de restrictions adminla source
python -m
réaliser devantpip install
?python -m pip...
fonctionne, mais cepip...
n'est pas le cas: ils sont en fait la même chose, en supposant qu'ils sont en fait dans le mêmepython
répertoire. Peut-être, la situation observée était que lepip
programme autonome n'était pas disponible dans une ancienne version de python (mais il est maintenant dans les dernières 2.7 et 3.x). Dans ce cas, lepython
était dans un virtualenv local etpip
ne l'était pas, ilpython -m pip install
s'installerait donc dans le virtualenv local, alorspip
qu'il essaierait de l'installer dans le système python (et échouerait sans sudo). En tout cas, cela n'a pas de sens.Pour marquer un répertoire en tant que package, vous avez besoin d'un fichier nommé
__init__.py
, cela vous aide-t-il?la source
En utilisant
PyCharm
(une partie de la suite JetBrains), vous devez définir votre répertoire de script comme source:Right Click > Mark Directory as > Sources Root
la source
Vous lisez cette réponse dit que vous
__init__.py
êtes au bon endroit, vous avez installé toutes les dépendances et vous obtenez toujours leImportError
.J'étais confronté à un problème similaire, sauf que mon programme fonctionnerait correctement lorsqu'il était exécuté à l'aide de PyCharm, mais l'erreur ci-dessus lorsque je l'exécutais à partir du terminal. Après avoir creusé plus loin, j'ai découvert qu'il
PYTHONPATH
n'y avait pas d'entrée pour le répertoire du projet. Donc, je définisPYTHONPATH
par instruction d'importation fonctionne sur PyCharm mais pas à partir du terminal :Il existe une autre façon de le faire en utilisant
sys.path
comme:Vous pouvez utiliser l'insertion / l'ajout en fonction de l'ordre dans lequel vous souhaitez que votre projet soit recherché.
la source
Pour moi, c'était quelque chose de vraiment stupide. J'ai installé la bibliothèque en utilisant
pip3 install
mais exécutais mon programmepython program.py
par opposition àpython3 program.py
.la source
Ouaip. Vous avez besoin du répertoire pour contenir le
__init__.py
fichier, qui est le fichier qui initialise le package. Ici, regardez ça .la source
par exemple: / etc / environment
PYTHONPATH = $ PYTHONPATH: / opt / folder1: / opt / folder2
/ opt / folder1 / foo
/ opt / folder2 / foo
Et, si vous essayez d'importer un fichier foo, python ne saura pas lequel vous voulez.
depuis foo import ... >>> importerror: aucun module nommé foo
la source
Mes deux centimes:
Cracher:
Cela m'a complètement dérangé - j'ai parcouru des messages et des messages suggérant des hacks syspath laids (comme vous le voyez,
__init__.py
tous étaient là). Il se trouve que game / oblivion.py et game / oblivion confondaient python qui crachait le plutôt inutile "Aucun module nommé RecordGroups". Je serais intéressé par une solution de contournement et / ou des liens documentant ce comportement (du même nom) -> EDIT (2017.01.24) - jetez un œil à Que faire si j'ai un module et un package du même nom? Fait intéressant, normalement les packages ont priorité, mais apparemment notre lanceur viole cela.EDIT (2015.01.17): Je n'ai pas mentionné que nous utilisons un lanceur personnalisé disséqué ici .
la source
game.oblivion.RecordGroups !== game/oblivion/patchers/RecordGroups.py
Peut vouloir corriger cela en ajoutant votre code python à utiliser:game.oblivion.patchers.RecordGroups
game.oblivion.__init__.py
mais je devrai peut-être vérifier celaLinux: les modules importés se trouvent dans /usr/local/lib/python2.7/dist-packages
Si vous utilisez un module compilé en C, n'oubliez pas de chmoder le fichier .so après
sudo setup.py install
.la source
Dans mon cas, le problème était que j'étais lié au débogage
python
&boost::Python
, ce qui nécessite que l'extension soitFooLib_d.pyd
, et pas seulementFooLib.pyd
; renommer le fichier ou mettre à jour lesCMakeLists.txt
propriétés a corrigé l'erreur.la source
Si vous avez essayé toutes les méthodes fournies ci-dessus mais avez échoué, votre module porte peut-être le même nom qu'un module intégré. Ou, un module avec le même nom existant dans un dossier qui a une priorité élevée dans
sys.path
celle de votre module.Pour déboguer, dites vos
from foo.bar import baz
plaintesImportError: No module named bar
. Changer pourimport foo; print foo
, qui montrera le chemin defoo
. C'est ce que vous attendez?Sinon, renommez
foo
ou utilisez les importations absolues .la source
ImportError: No module named foo
.Mon problème était que j'avais ajouté le répertoire avec le
__init__.py
fichier à PYTHONPATH, alors qu'en fait j'avais besoin d'ajouter son répertoire parent.la source
À tous ceux qui ont encore ce problème. Je crois que Pycharm se confond avec les importations. Pour moi, lorsque j'écris «à partir de l'espace de noms, importez quelque chose», la ligne précédente est soulignée en rouge, signalant qu'il y a une erreur, mais fonctionne. Cependant, «à partir de .namespace importer quelque chose» n'est pas souligné, mais ne fonctionne pas non plus.
Essayer
la source
Correction de mon problème en écrivant
print (sys.path)
et découvert que python utilisait des packages obsolètes malgré une installation propre. La suppression de ces pythons créés utilise automatiquement les packages appropriés.la source
Dans mon cas, parce que j'utilise PyCharm et PyCharm, créez un 'venv' pour chaque projet dans le dossier du projet, mais ce n'est qu'un mini env de python. Bien que vous ayez installé les bibliothèques dont vous avez besoin en Python, mais dans votre projet personnalisé 'venv', il n'est pas disponible. C'est la vraie raison de 'ImportError: Aucun module nommé xxxxxx' ne s'est produit dans PyCharm. Pour résoudre ce problème, vous devez ajouter des bibliothèques à votre projet personnalisé env par ces étapes:
Prendre plaisir.
la source
Après avoir juste souffert du même problème, j'ai trouvé que ma résolution était de supprimer tout
pyc
fichiers de mon projet, il semble que ces fichiers mis en cache provoquaient en quelque sorte cette erreur.Le moyen le plus simple que j'ai trouvé pour ce faire était de naviguer vers mon dossier de projet dans l'explorateur Windows et de rechercher
*.pyc
, puis de sélectionner tout ( Ctrl+ A) et de les supprimer ( Ctrl+X ).Il est possible que j'aurais pu résoudre mes problèmes en supprimant simplement le
pyc
fichier spécifique , mais je n'ai jamais essayé celala source
Je fait face au même problème:
Import error
. De plus, la bibliothèque a été installée à 100% correctement. La source du problème était que sur ma version PC 3 de python (paquet anaconda) ont été installés). C'est pourquoi la bibliothèque n'a pas été installée au bon endroit. Après cela, je viens de passer à la bonne version de python dans mon IDE PyCharm.la source
J'ai eu la même erreur. Cela a été causé par la création d'un dossier dans le même dossier que mon script, dont le nom était en conflit avec un module que j'importais d'ailleurs. Au lieu d'importer le module externe, il a regardé dans ce dossier qui ne contenait évidemment pas les modules attendus.
la source
J'ai eu le même problème (Python 2.7 Linux), j'ai trouvé la solution et je voudrais la partager. Dans mon cas, j'avais la structure ci-dessous:
Dans 'main.py', j'avais essayé sans succès toutes les combinaisons ci-dessous:
La solution était beaucoup plus simple que je ne le pensais. J'ai renommé le dossier "Booklet" en "booklet" et c'est tout. Python peut maintenant importer la classe Question normalement en utilisant dans 'main.py' le code:
De là, je peux conclure que les noms de paquets (dossiers) comme 'booklet' doivent commencer à partir de minuscules, sinon Python le confond avec les noms de classe et les noms de fichiers.
Apparemment, ce n'était pas votre problème, mais la réponse de John Fouhy est très bonne et ce fil contient presque tout ce qui peut provoquer ce problème. Donc, c'est encore une chose et j'espère que cela pourrait peut-être aider les autres.
la source
Dans mon cas, j'incluais le chemin vers le dossier package.egg plutôt que le package réel en dessous. J'ai copié le package au niveau supérieur et cela a fonctionné.
la source
Cela a fonctionné pour moi:
__init__.py
fichier créé dans le dossier parent (dans votre cas, dans lesite-packages
dossier). Et importé comme ça:J'espère que cela vous sera également utile!
la source
Dans le serveur Linux, essayez
dos2unix script_name
(supprimer tous les
pyc
fichiers (s'il y en a) avec la commandefind . -name '*.pyc' -delete
)et réexécuter dans le cas si vous avez travaillé sur un script sur Windows
la source
Dans mon cas, j'utilisais
sys.path.insert()
pour importer un module local et j'obtenais àmodule not found
partir d'une bibliothèque différente. Je devais mettre ensys.path.insert()
dessous les importations qui faisaient étatmodule not found
. Je suppose que la meilleure pratique consiste à mettresys.path.insert()
au bas de vos importations.la source