Problème de référence non résolu dans PyCharm

373

J'ai une structure de répertoire

├── simulate.py
├── src
   ├── networkAlgorithm.py
   ├── ...

Et je peux accéder au module réseau avec sys.path.insert().

import sys
import os.path
sys.path.insert(0, "./src")
from networkAlgorithm import *

Cependant, pycharm se plaint de ne pas pouvoir accéder au module. Comment puis-je apprendre à pycham à résoudre la référence?

entrez la description de l'image ici

prosseek
la source
4
Le dossier src contient-il un __init__.pyfichier?
Puffin GDI
@Puffin GDI: Non, ce n'est pas le cas.
prosseek
5
@PuffinGDI Les dossiers src ont-ils besoin de ce fichier init .py?
Jack Chi
Oui pour que python identifie les packages: stackoverflow.com/questions/42094723/…
rnoodle
J'ai renommé le nom de la classe et continue à travailler dessus. Lorsque j'ai cliqué sur Exécuter, il y a eu cette erreur, j'ai complètement oublié de renommer et j'ai essayé de rechercher des suggestions pycharm lors de l'importation. Merde, les suggestions sont sensibles à la casse! - Nouveau sur python !!
Vignesh Paramasivam

Réponses:

817

L'ajouter manuellement comme vous l'avez fait est en effet une façon de le faire, mais il existe une méthode plus simple, qui consiste simplement à dire à pycharm que vous souhaitez ajouter le srcdossier en tant que racine source, puis en ajoutant la racine des sources à votre python. chemin.

De cette façon, vous n'avez pas à coder en dur les choses dans les paramètres de votre interprète:

  • Ajouter en srctant que racine de contenu source:

                            entrez la description de l'image ici

  • Assurez-vous ensuite d'ajouter des sources à votre PYTHONPATH:

entrez la description de l'image ici

  • Maintenant, les importations seront résolues:

                      entrez la description de l'image ici

De cette façon, vous pouvez ajouter tout ce que vous voulez en tant que racine source, et les choses fonctionneront simplement. Cependant, si vous ne l' avez pas marqué comme racine source, vous obtiendrez une erreur:

                                  entrez la description de l'image ici

Après tout cela, n'oubliez pas de redémarrer. Dans le menu PyCharm, sélectionnez: Fichier -> Invalider les caches / redémarrer

Games Brainiac
la source
17
Cela fonctionne également si vous utilisez le plugin Python avec IntelliJ.
rob mayoff
13
Cette solution fonctionne. Le problème est que lorsqu'un autre programmeur récupère le code de svn, il doit refaire les mêmes réglages pour se débarrasser de l'invite d'erreur "référence non résolue".
Ben Lin
2
@GamesBrainiac, la solution est que l'EDI peut analyser "sys.path.insert (0," ./src ")", ajouter cela dans PYTHONPATH pour ce fichier spécifique, puis donner une analyse syntaxique appropriée.
Ben Lin
2
Vous devez également vous assurer que le chemin racine de votre contenu est correct. Dans pycharm 5, vous pouvez le trouver dans Préférences -> Projet -> Structure du projet.
lps
1
Curieusement, les sous-répertoires ne sont pas pris en compte. Par exemple, si sous src, nous avons un viewsdossier dans lequel j'ai myview.py, je reçois toujours une erreur de référence non résolue lorsque j'essaie from src.views.myview import <my_function>...
SexyBeast
49
  1. vérifier le __init__.pyfichier dans le srcdossier
  2. ajouter le srcdossier en tant que racine source
  3. Assurez-vous ensuite d'ajouter des sources à votre PYTHONPATH(voir ci-dessus)
  4. dans le menu PyCharm, sélectionnez: Fichier -> Invalider les caches / redémarrer
Ukr
la source
11
Cette toute dernière étape était la seule chose qui manquait dans ma solution. La réponse acceptée pourrait y ajouter cela.
aimbire
sans la dernière étape mentionnée ici, la réponse acceptée ne fonctionne pas. La réponse acceptée doit également ajouter cette étape /
santhosh kumar
23

Si quelqu'un regarde toujours cela, la réponse acceptée fonctionne toujours pour PyCharm 2016.3 quand je l'ai essayé. L'interface utilisateur a peut-être changé, mais les options sont toujours les mêmes.

c'est à dire. Faites un clic droit sur votre dossier racine -> 'Mark Directory As' -> Source Root

AeroHil
la source
1
Autant de réponses complexes dans cette discussion. La solution présentée ici a fonctionné si facilement pour moi.
16

Après avoir testé toutes les solutions de contournement, je vous suggère de les consulter Settings -> Project -> project dependencieset de les réorganiser.

pycharm prefrence

mehdi
la source
Cela fonctionne parfaitement pour moi. J'ai installé pygamelà-bas et pas plus de problème de référence non résolu!
Michal Przybylowicz du
5

Généralement, il s'agit d'un problème de package manquant, placez simplement le signe d'insertion sur la référence non résolue et appuyez sur Alt+Enterpour révéler les options, puis vous devez savoir comment le résoudre.

Ch_y
la source
4

Après avoir suivi la réponse acceptée, faire ce qui suit l'a résolu pour moi:

FileSettingsProject <your directory/project>Project Dependencies

Choisissez le répertoire / projet où réside votre fichier dont les importations non résolues et cochez la case pour indiquer à Pycharm que ce projet dépend de votre autre projet.

La hiérarchie de mon dossier est légèrement différente de celle de la question. Le mien est comme ça

├── MyDirectory  
     └── simulate.py  
├── src  
     ├── networkAlgorithm.py  
     ├── ...

Dire à Pycharm que src dépend de la résolution MyDirectorydu problème pour moi!

Benjamin
la source
4

Bien que toutes les réponses soient vraiment utiles, il y a une toute petite information qui devrait être expliquée explicitement:

  • Essentiellement, un projet avec plusieurs répertoires hiérarchiques fonctionne comme un package avec certains attributs.
  • Pour importer des classes créées localement personnalisées, nous devons accéder au répertoire contenant le .pyfichier et y créer un __init__.pyfichier (vide).

Cela est utile parce que ce fichier est requis pour que Python traite le répertoire comme contenant des packages. À votre santé!

Muhammad Waqas Kayani
la source
3

Installez via PyCharm (fonctionne avec Community Edition). Ouvrez Settings > Project > Project Interpreterpuis cliquez sur l'icône verte + dans la capture d'écran ci-dessous. Dans la 2ème boîte de dialogue qui s'ouvre, entrez le nom du package et cliquez sur le bouton «Installer le package».

entrez la description de l'image ici

danday74
la source
1

Veuillez vérifier si vous utilisez le bon interprète que vous êtes censé utiliser. J'obtenais l'erreur "référence non résolue 'django'" pour résoudre ce problème. J'ai changé l'interpréteur de projet (changé Python 3 en Python 2.7) à partir des paramètres du projet: sélectionnez Projet, allez dans Fichier -> Paramètres -> Projet: -> Interprète de projet -> Brows et sélectionnez la version ou l'interpréteur correct (par exemple /usr/bin/python2.7).

kishs1991
la source
1

Dans mon cas, le problème était que j'utilisais Virtual environmentqui n'avait pas accès aux packages de sites globaux. Ainsi, l'interpréteur n'était pas au courant des packages nouvellement installés.

Pour résoudre le problème, modifiez ou recréez simplement votre interprète virtuel et cochez l' Inherit global site-packagesoption.

entrez la description de l'image ici

Dan
la source
Cela n'a-t-il pas des conséquences indésirables et ne va-t-il pas à l'encontre d'une raison d'utiliser un environnement virtuel? Autrement dit, si vous prenez cet environnement quelque part et que ces packages de sites globaux sont installés, vous avez des problèmes. C'est ce que je pensais.
theStud54
1

Cela a fonctionné pour moi: Top Menu -> File -> Invalidate Caches/Restart

Gershon Herczeg
la source
0

Fait dans PyCharm 2019.3.1 Faites un clic droit sur votre dossier src -> "Marquer le répertoire comme" -> Cliquez sur "Exclus" et votre dossier src devrait être bleu.

Burhan U Din
la source
0

Pour moi, l'ajout du venvchemin des sites-packages de virtualenv ( ) aux chemins de l'interpréteur fonctionne. Finalement!

entrez la description de l'image ici

weaming
la source
-1

Pycharm utilise du venv. Dans la console du venv, vous devez installer les packages explicitement ou entrer settings -> project interpreter -> add interpreter -> inherit global site-packages.

yunus
la source
-1

Dans les versions plus récentes de pycharm, vous pouvez le faire simplement en cliquant avec le bouton droit sur le répertoire ou le package python à partir duquel vous souhaitez importer un fichier, puis cliquez sur 'Mark Directory As' -> 'Sources Root'

Shravan Kumar
la source
-1

La façon la plus simple de résoudre ce problème consiste à effectuer les opérations suivantes dans votre logiciel pyCharm:

Cliquez sur: Fichier> Paramètres> (Projet: le nom de votre projet)> Interprète de projet>

puis cliquez sur l'icône "+" sur le côté droit pour rechercher le package souhaité et l'installer.

Profitez du codage !!!

zaid.mohammed
la source
1
Bienvenue dans Stack Overflow et merci pour votre réponse. Bien que cela puisse être correct, à l'avenir, veuillez éviter de publier des images ou des liens vers d'autres sites sans contexte ni autres détails. Le lien peut cesser de fonctionner à un moment donné, ce qui rend cette réponse moins utile pour les autres utilisateurs.
CyberJacob
@CyberJacob Merci beaucoup, et merci beaucoup pour vos conseils, j'ai modifié la réponse en supprimant l'image et en ajoutant du texte à la place.
zaid.mohammed