Problèmes d'importation non résolus avec PyDev et Eclipse

108

Je suis très nouveau sur PyDev et Python, même si j'ai beaucoup utilisé Eclipse pour Java. J'essaie de travailler sur certains des exemples Dive Into Python et cela ressemble à un problème extrêmement trivial qui devient tout simplement extrêmement ennuyeux. J'utilise Ubuntu Linux 10.04.

Je veux pouvoir utiliser le fichier odbchelper.py, qui se trouve dans le répertoire /Desktop/Python_Tutorials/diveintopython/py

Voici mon fichier example.py sur lequel je travaille dans mon projet PyDev / Eclipse:

import sys
sys.path.append("~/Desktop/Python_Tutorials/diveintopython/py")

Cela fonctionne bien, mais je veux que la ligne suivante de mon code soit:

import odbchelper

et cela provoque une erreur d'importation non résolue à chaque fois. J'ai ajouté des __init__.pyfichiers à presque tous les répertoires possibles et cela n'aide en rien. J'ai essayé d'ajouter des __init__.pyfichiers un à la fois aux différents niveaux de répertoires entre l'emplacement du projet et le fichier odbchelper.py, et j'ai également essayé d'ajouter les __init__.pyfichiers à tous les répertoires intermédiaires simultanément. Aucun des deux ne fonctionne.

Tout ce que je veux faire, c'est avoir un projet quelque part dans un autre répertoire, par exemple /Desktop/MyStuff/Project, dans lequel j'ai example.py ... et ensuite de example.py je veux importer odbchelper.py depuis/Desktop/Python_Tutorials/diveintopython/py/

Chaque réponse de forum que je peux trouver en disant simplement d'utiliser la sys.path.append()fonction pour ajouter ce répertoire à mon chemin, puis l'importer ... mais c'est précisément ce que je fais dans mon code et cela ne fonctionne pas.

J'ai aussi essayé le Ctrl- 1truc pour supprimer le message d'erreur, mais le programme ne fonctionne toujours pas correctement. Je reçois une erreur, ImportError: No module named odbchelper. Il est donc clair que le chemin n'est pas ajouté, ou il y a un problème que toutes mes nombreuses permutations d'ajout de __init__.pyfichiers ont manqué.

C'est très frustrant que quelque chose d'aussi simple ... appeler des choses à partir d'un fichier qui existe ailleurs sur ma machine ... nécessite autant d'efforts.

ely
la source
Assurez-vous que la casse (capitalisation) est correcte pour tous les répertoires nécessaires dans votre PYTHONPATH.
Cam Jackson
Je sais que cela a déjà été répondu, mais je recevais une importation non résolue pour le grpmodule. Je viens de l'ajouter à la builtinsliste dans Préférences> PyDev> Interprètes> Python> Forced Builtins et j'obtiens toujours l'auto-complétion pour ce module
user1040495

Réponses:

132

Dans les propriétés de votre projet pydev, il y a un volet appelé "PyDev - PYTHONPATH", avec un sous-volet appelé "Bibliothèques externes". Vous pouvez ajouter des dossiers source (tout dossier comportant un __init__.py) au chemin à l'aide de ce volet. Le code de votre projet pourra alors importer des modules à partir de ces dossiers source.

David allemand
la source
4
Si vous définissez correctement les propriétés pydev, vous n'avez pas besoin de jouer avecsys.path
Velociraptors
6
Pour les autres chercheurs, je voulais ajouter mon expérience -Windows 7, Python 2.7.1, Eclipse 3.6.2, PyDev, Pyschopg (pour Python 2.7 amd64). L'installation de Psychopg est allée à C: \ Python27 \ Lib \ site-packages \ psycopg2 (sous l'installation de Python 2.7). J'ai d'abord référencé ce dossier et tous les dossiers enfants avec init .py, mais j'ai constaté que je devais également référencer le dossier site_packages. ( stackoverflow.com/questions/2983088/unresolved-import-models ) ( stackoverflow.com/questions/4631377/… )
Jeff Maass
86
Un autre point à noter - Eclipse peut avoir besoin d'être redémarré pour que cela fonctionne. Cela ne semble fonctionner que via "Fichier -> Redémarrer" et non en fermant et en rouvrant manuellement.
soulBit
18
Note importante: J'ai trouvé que l'interprète automatique Config ajoute C:\Python27\lib\site-packages, mais sur mon ordinateur, le dossier lib est capitalisé: C:\Python27\Lib\site-packages. Le remplacement de l'entrée minuscule par une entrée majuscule, puis Fichier-> Redémarrer a résolu le problème pour moi. J'espère que cela aide quelqu'un d'autre là-bas :)
Cam Jackson
10
@soulBit J'aimerais pouvoir faire un commentaire 20 fois, j'ai passé une bonne heure à essayer de comprendre pourquoi mon importation n'était toujours pas résolue. Merci
Matt Dodge
51

J'utilise eclipse kepler 4.3, PyDev 3.9.2 et sur mon ubuntu 14.04 j'ai rencontré le même problème. J'ai essayé et passé des heures, avec toutes les options ci-dessus, mais en vain. Ensuite, j'ai essayé ce qui suit, ce qui était super:

  • Sélectionnez Projet -> Clic droit-> PyDev -> Supprimer la configuration du projet PyDev
  • fichier-> redémarrer

Et j'utilisais Python 2.7 comme interpréteur, bien que cela n'affecte pas, je pense.

BitByte_Bake
la source
5
Pas besoin de redémarrer Eclipse, il suffit de fermer et de rouvrir le fichier. Il a également fonctionné sous Windows avec Eclipse Luna, merci!
Noam Manos
J'ai dû redémarrer Eclipse deux fois pour faire disparaître les avertissements. Merci
Vladimir S.
Fonctionne également avec Python 3.7. Cela devrait être la solution à cette question.
SPRBRN
J'ai essayé ceci et maintenant je ne peux pas démarrer mon serveur DEV. Comment remplacer le fichier?
Lee Loftiss
@ BitByty-Bake quelle est la cause principale?
ankostis
42

Je viens de mettre à niveau un projet WXWindows vers Python 2.7 et je n'ai eu aucun problème pour que Pydev reconnaisse le nouvel interpréteur. Fait la même chose que ci-dessus en configurant l'interpréteur, fait une nouvelle installation d'Eclipse et Pydev. Je pensais qu'une partie de python devait être corrompue, alors j'ai tout réinstallé à nouveau. Arghh! Fermé et rouvert le projet, et redémarré Eclipse entre tous ces changements.

FINALEMENT remarqué que vous pouvez «supprimer la configuration du projet PyDev» en faisant un clic droit sur le projet. Ensuite, il peut à nouveau être transformé en un projet PyDev, maintenant c'est bon comme l'or!

Paul
la source
Oui, fermé et rouvert le projet pour se débarrasser de ces messages ImportError inquiétants
somnathchakrabarti
17

J'ai corrigé mon pythonpath et tout était dandy lorsque j'ai importé des éléments via la console, mais toutes ces importations non résolues auparavant étaient toujours marquées comme des erreurs dans mon code, peu importe le nombre de fois que j'ai redémarré eclipse ou actualisé / nettoyé le projet.

J'ai cliqué avec le bouton droit sur le projet-> Pydev-> Supprimer les marqueurs d'erreur et il s'est débarrassé de ce problème. Ne vous inquiétez pas, si votre code contient des erreurs réelles, elles seront à nouveau marquées.

Martin
la source
Cela fonctionne très bien en utilisant Liclipse avec odoo 10. Merci!
Didierh
11

projet -> propriétés -> pydev-pythonpath -> bibliothèques externes -> ajouter le dossier source, ajouter le DOSSIER PARENT du projet. Puis redémarrez eclipse.

zhaokongsheng
la source
2
Eh bien, c'est celui qui a résolu mon problème.
Simon Hayward
Pas besoin de redémarrer, fermez et rouvrez le fichier. Corrigé pour moi!
Jerther
4

Voici ce qui a fonctionné pour moi (suggéré par soulBit):

1) Restart using restart from the file menu
2) Once it started again, manually close and open it.

C'est la solution la plus simple qui soit et elle supprime complètement la chose ennuyeuse.

Brana
la source
1

Il existe deux façons de résoudre ce problème:

  • Supprimez l'interpréteur Python des "interpréteurs Python" et ajoutez-le à nouveau.
  • Ou ajoutez simplement le dossier avec les bibliothèques dans l'interpréteur que vous utilisez dans votre projet, dans mon cas, j'utilisais "bottle" et le dossier que j'ai ajouté était "c: \ Python33 \ Lib \ site-packages \ bottle-0.11.6 -py3.3.egg "

Maintenant, je ne vois plus l'erreur, et la fonction de complétion de code fonctionne aussi bien avec "bouteille".

PachinSV
la source
1

J'exécute Eclipse 4.2.0 (Juno) et PyDev 2.8.1, et j'ai rencontré ce problème avec une bibliothèque installée sur le chemin de mon site-packages. Selon cette question SO:

Fichiers Pydev et * .pyc

... il y a un problème avec les fichiers PyDev et pyc. Dans le cas de la bibliothèque particulière que j'ai essayé de référencer, tout ce qui est livré est des fichiers pyc.

Voici ce que j'ai fait pour résoudre ce problème:

  1. Installez uncompyle2 depuis https://github.com/Mysterie/uncompyle2
  2. Exécutez uncompyle2 sur les fichiers * .pyc dans la bibliothèque site-packages. Exemple:

    uncompyle2 -r -o / tmp / chemin / vers / site-packages / lib

  3. Renommez les fichiers * .pyc_dis résultants produits par uncompyle2 en * .py
  4. Déplacez / copiez ces fichiers * .py dans le chemin des packages du site
  5. Dans Eclipse, sélectionnez Fichier> Redémarrer

L'erreur d'importation non résolue relative aux fichiers .pyc devrait maintenant disparaître.

Communauté
la source
0

Suivant, à mon avis, résoudra le problème

  1. Ajout du fichier init .py à votre dossier "~ / Desktop / Python_Tutorials / diveintopython / py"
  2. Allez dans Fenêtre -> Préférences -> PyDev -> Interprètes -> Interpréteur Python pour supprimer votre paramètre d'interpréteur Python (la raison en est que PyDev ne peut pas actualiser automatiquement les mises à jour effectuées sur un système PythonPath)
  3. Ajoutez l'interpréteur avec les mêmes détails qu'avant (cela actualisera votre paramètre d'interpréteur Python avec les mises à jour apportées à votre PythonPath)
  4. Enfin, puisque votre dossier "~ / Desktop / Python_Tutorials / diveintopython / py" n'est pas un PythonPath standard, vous devrez l'ajouter. Il y a deux façons de le faire

une. Selon ce que David German a suggéré. Cependant, cela ne s'applique qu'aux projets particuliers dans lesquels vous êtes. Ajoutez "~ / Desktop / Python_Tutorials / diveintopython / py" dans un nouveau PythonPath sous Fenêtre -> Préférences -> PyDev -> Interpréteurs -> Interpréteur Python -> Sous-onglet Bibliothèques -> NewFolder

J'espère que ça aide.

Ridwan Kurniawan
la source
0

J'ai eu quelques problèmes lors de l'importation de bibliothèques supplémentaires, après avoir essayé de résoudre le problème, en comprenant PYTHONPATH, l'interpréteur et la grammaire, j'ai trouvé que j'avais tout écrit, mais les problèmes persistent. Après cela, j'ajoute simplement une nouvelle ligne vide dans les fichiers contenant les erreurs d'importation et les ai sauvegardées et l'erreur a été résolue .

Miguel FMoreira
la source
-1
KD.py

class A:
a=10;

KD2.py 
from com.jbk.KD import A;
class B:
  b=120;

aa=A();
print(aa.a)

CECI fonctionne parfaitement pour moi

Un autre exemple est

main.py
=======
from com.jbk.scenarios.objectcreation.settings import _init
from com.jbk.scenarios.objectcreation.subfile import stuff

_init();
stuff();

settings.py
==========
def _init():
print("kiran")


subfile.py
==========
def stuff():
print("asasas")    
Java par Kiran
la source
Veuillez envisager de séparer les noms de fichiers et les codes. Et vous devez également corriger certains retraits.
dkato le