web-dev-qa-db-fra.com

PyCharm ne trouve pas les paquets dans virtualenv

J'ai la dernière version de PyCharm CE et je l’utilise avec virtualenv. J'ai défini l'interprète comme interprète dans la variable virtualenv. La fenêtre Interprète de projet de PyCharm répertorie tous les packages que j'ai installés. Je l'ai confirmé en exécutant pip freeze > requirements.txt et en parcourant les packages manuellement.

Mon problème est que PyCharm ne trouvera pas certains inclus dans ses fenêtres d’éditeur, comme Flask-Login:

Dans from flask.ext.login import current_user, login_user, logout_user, login_required, les includes current_user, login_user, logout_user, login_required sont tous marqués comme des références non résolues.

Est-ce que je manque quelque chose?

23
ruipacheco

Le problème peut venir de PyCharm qui détecte des "chemins d'interprétation" défectueux pour votre environnement virtuel. Va ici:

PyCharm (menu) -> Preferences (Menu option)
               -> Project: <name> (Dropdown) 
               -> Project Interpreter (Menu option)
               -> 'Settings' button (Looks like a gear)
               -> More (Menu option)
               -> Select your virtualenv interpreter
               -> Click 'Show paths for interpreter' button (on bottom of list window)

Maintenant que vous vous trouvez dans cet endroit (certes tortueux), vous devriez voir les chemins utilisés par cet interprète. Si ma théorie est correcte, ils pointent vers des emplacements système globaux. Pour ajouter les chemins d’environnement virtuel, vous devez cliquer sur le bouton + et ajouter les chemins correspondants existant dans votre environnement virtuel. Une fois cette opération terminée, il est judicieux de sélectionner les chemins d'accès système globaux et de cliquer sur - pour les supprimer. Cliquez sur Appliquer et accédez à File -> Invalidate caches / Restart pour recharger PyCharm.

Cela devrait amener votre interprète à indiquer le bon emplacement pour les bibliothèques que vous avez installées dans votre virtualenv et vous ne devriez plus avoir l'erreur d'importation. Notez que même avec ce correctif, vous ne verrez pas vos bibliothèques sous le Project Interpreter, mais elles devraient être chargées.

43
Nathaniel Ford

Dans la nouvelle version de PyCharm (2016.1.4 dans mon cas):

  • Réglages
  • Projet: nom du projet
    • interprète de projet
    • sur le côté droit, une liste déroulante vous permettra de choisir l'interprète. Il devrait y avoir venv options.

Voir l'image ci-dessous pour une meilleure explication (comme ils l'ont dit, 1 image vaut des milliers de mots)

 Setting python interpreter

7
dieend

Je faisais également face au même problème (après l'inclusion de Nathaniel Ford et de sa suggestion correcte). Assurez-vous que votre configuration d'exécution/de débogage en tant qu'interpréteur python correct est sélectionnée:

 enter image description here

1
Eyedia Tech

Pour moi, la solution la plus simple était d'ouvrir le projet dans le répertoire racine (mon projet comporte un répertoire serveur et un répertoire client, le répertoire racine contenant donc les deux). Lorsque vous ouvrez le projet dans le répertoire racine, il est capable de trouver les dépendances sans modifier les paramètres pycharm, car il les utilise par convention.

0
Ben Yitzhaki

Ouvrez Preferences -> Project -> Project Interpreter, voyez-vous le module à cet endroit?

Si oui, vous pourriez avoir un autre fichier quelque part dans votre projet portant le même nom que flask.ext.login, ce qui empêche pycharm de localiser le module actuel.

Si non, vous pouvez cliquer sur le ... à côté de votre interprète et sélectionner more..., sélectionnez votre interprète et en bas (à côté du filtre), cliquez sur le Show paths for the selected interpreter, vous pouvez y ajouter le chemin de votre module.

0
J.Ku

Je n'ai pas pu attribuer l'environnement virtuel existant à mon projet, mais après avoir accédé à 

Fichier -> Paramètres -> Interprète de projet-> Afficher tout-> cliquez sur '+' 

pour créer un nouvel environnement virtuel ou choisir l’environnement virtuel existant, je suis en mesure d’affecter et d’utiliser les environnements virtuels existants.

0
jagadish