web-dev-qa-db-fra.com

Erreur PyCharm: 'Pas de module' lors de la tentative d'importation de son propre module (script python)

J'ai écrit un module (fichier my_mod.py résidant dans le dossier my_module) . Je travaille actuellement dans le fichier cool_script.py qui réside dans le dossier cur_proj. J'ai ouvert le dossier dans PyCharm en utilisant File - open (et je suppose donc qu’il s’agit d’un projet PyCharm).

Dans ProjectView (CMD-7), je peux voir mon projet cur_proj (en rouge) et sous "Bibliothèques externes", je vois my_module. Dans cool_script.py, je peux écrire 

from my_module import my_mod as mm

et PyCharm fait même des suggestions pour my_mod. Jusqu'ici tout va bien.

Cependant, lorsque j'essaie de lancer cool_script.py, PyCharm me dit "Aucun module nommé mon_module"

Cela me semble étrange, car

A) dans le terminal (OS 10.10.2), en python, je peux importer le module sans problème - il existe une entrée correspondante dans le PYTHONPATH dans .bashrc

B) dans PyCharm - Paramètres - Projet cur_proj - Interprète de projet - CogWheel à côté de l'interpréteur python - plus - pour afficher les chemins de l'icône d'interpréteur sélectionnée, les chemins de PYTHONPATH apparaissent

Par conséquent, pourquoi est-ce que je reçois l'erreur lorsque j'essaie de lancer cool_script.py? -- Qu'est-ce que je rate?

Remarques:

Addendum 2015-février-25

Quand je vais dans PyCharm pour Exécuter - Modifier les configurations, pour mon projet actuel, deux options sont sélectionnées avec une coche: "Ajouter des racines de contenu à PYTHONPATH" et "Ajouter des racines de source à PYTHONPATH ". Lorsque les deux sont décochés, je peux charger mon module.

Donc ça marche maintenant - mais pourquoi

D'autres questions ont émergé:

  • Que sont les "racines de contenu" et que sont les "racines sources"? Et pourquoi ajouter quelque chose à PYTHONPATH le fait-il casser d'une manière ou d'une autre?
  • dois-je décocher ces deux options tout le temps (donc aussi dans les valeurs par défaut, pas seulement dans les configurations spécifiques au projet (panneau de gauche de la boîte de dialogue Configurations Exécuter/Déboguer))?
97
Claus

Si votre propre module est dans le même chemin, vous devez le marquer en tant que Sources Root. Dans l'explorateur de projet, cliquez avec le bouton droit sur le répertoire que vous souhaitez importer. Puis sélectionnez Mark Directory As et sélectionnez Sources Root.

J'espère que ça aide.  

217
Beatriz Fonseca

PyCharm Community/Professional 2018.2.1

J'avais ce problème tout à l'heure et j'ai pu le résoudre d'une manière similaire à celle indiquée par @Beatriz Fonseca et @Julie. 

Si vous allez dans File -> Settings -> Project: YourProjectName -> Project Structure, vous aurez une disposition de répertoire du projet dans lequel vous travaillez actuellement. Vous devrez passer par vos répertoires et les étiqueter comme étant soit le répertoire Source pour tous vos fichiers source, ou en tant que dossier Resource pour les fichiers strictement destinés à l'importation. 

Vous voudrez également vous assurer que vous placez des fichiers __init__.py dans vos répertoires de ressources, ou vraiment, où que vous vouliez importer, et cela fonctionnera parfaitement. 

J'espère que cette réponse aidera quelqu'un, et j'espère que JetBrains corrigera ce bug ennuyeux.

11
Oleg Silkin

Ce que j'ai essayé, c'est de trouver l'emplacement de mes fichiers.

par exemple. E:\git_projects\My_project\__init__.py is my location.

Je suis allé dans Fichier -> Paramètres -> Projet: Mon_projet -> Structure du projet et j'ai ajouté la racine du contenu à propos de l'endroit de la mention E:\git_projects\My_project

cela a fonctionné pour moi.

6
Virendra Patel

my_module est un dossier et non un module et vous ne pouvez pas importer un dossier. Essayez de déplacer my_mod.py dans le même dossier que cool_script.py, puis doimport my_mod as mm. En effet, python ne cherche que dans le répertoire courant et sys.path, et ne trouvera donc pas my_mod.py à moins que ce ne soit dans le même répertoire.

Ou vous pouvez rechercher ici une réponse vous indiquant comment importer à partir d'autres répertoires.

En ce qui concerne vos autres questions, je ne le sais pas car je n’utilise pas PyCharm.

4
EpsilonX

Cela peut être dû au fait que l'interpréteur Python ne trouve pas votre code. Vous devez mentionner explicitement à Python pour trouver votre code à cet endroit.

Faire cela:

  • Allez sur votre console python
  • Ajoutez sys.path.extend(['your module location']) à la console Python.

Dans ton cas:

  • Allez sur votre console python,
  • Au début, écrivez le code suivant:

    import sys
    sys.path.extend([my module URI location])
    
  • Une fois que vous avez écrit cette déclaration, vous pouvez exécuter la commande suivante:

    from mymodule import functions
    
2
Shravan Shetty

Je recevais aussi l'erreur avec "Ajouter les racines de la source à PYTHONPATH". Mon problème était que j'avais deux dossiers avec le même nom, comme project/subproject1/thing/src et project/subproject2/thing/src et que je les avais tous deux marqués comme racine source. Lorsque j'ai renommé l'un des dossiers "thing" en "thing1" (tout nom unique), cela a fonctionné.

Peut-être que si PyCharm ajoute automatiquement les racines source sélectionnées, il n'utilise pas le chemin complet et mélange donc les dossiers portant le même nom.

2
RubberDuckRabbit

SO si vous allez à 

-> Setting -> Project: Mon_projet -> Structure du projet,

Juste le répertoire dans lequel le code source est disponible et marquez-le comme "Sources" (vous pouvez le voir dans la même fenêtre). Le répertoire avec le code source doit devenir bleu. maintenant, vous pouvez importer des modules résidant dans le même répertoire.

1
JRD

La principale étape qui doit prêter à confusion consiste à recréer la configuration d’exécution du fichier source que vous essayez d’exécuter, de sorte que l’entité IDE sélectionne les nouveaux chemins. 

La méthode qui a fonctionné pour moi a été d'aller dans Exécuter/Modifier les configurations ..., sélectionnez la configuration du fichier que vous essayez d'exécuter à gauche, décochez la case "Ajouter les racines de la source à PYTHONPATH", enregistrez, puis revenez en arrière et cochez la case et enregistrez. ALORS cela fonctionnerait.

1
tomchappell

La solution à ce problème sans avoir à marquer le répertoire en tant que racine source consiste à modifier les configurations d'exécution et, dans l'exécution, sélectionnez l'option "Rediriger l'entrée depuis" et choisissez le script que vous souhaitez exécuter. Cela fonctionne car il est alors traité comme si le script avait été exécuté de manière interactive dans ce répertoire. Cependant, Python marquera toujours le nom du module avec l’erreur "no module name x":

 Redirect input from:

Lorsque l'interprète exécute l'instruction d'importation, il recherche x.py dans une liste de répertoires assemblés à partir des sources suivantes:

  1. Le répertoire à partir duquel le script d'entrée a été exécuté ou le répertoire actuel si l'interpréteur est exécuté de manière interactive
  2. La liste des répertoires contenus dans la variable d'environnement PYTHONPATH, si elle est définie.
  3. Une liste de répertoires dépendant de l'installation configurés au moment de l'installation de Python, dans mon cas, usr/lib/python3.6 sur Ubuntu.
0
PyFox

La réponse qui a fonctionné pour moi était bien ce que OP mentionnait dans sa mise à jour de 2015: décochez ces deux cases dans votre configuration Python:

  • "Ajouter des racines de contenu à PYTHONPATH"
  • "Ajouter des racines sources à PYTHONPATH"

J'avais déjà la configuration d'exécution pour utiliser le bon venv, donc PyCharm ne faisait pas de travail supplémentaire pour ajouter des éléments sur le chemin n'était pas nécessaire. Au lieu de cela, il causait des erreurs.

0
Hober

Les racines de contenu sont des dossiers contenant votre code de projet, tandis que les racines de source sont définies comme identiques. La seule différence que j'ai comprise est que le code dans les racines source est construit avant le code dans la racine de contenu. 

Les décocher n'aurait pas d'incidence sur l'exécution tant que vous ne feriez pas de modules distincts dans votre paquet, qui sont connectés manuellement à Django. Cela signifie que si aucun de vos fichiers ne contient le 'depuis import Django ...' ou si une fonction n'est pas appelée via Django, désélectionner ces 2 options entraînera un dysfonctionnement.

Mise à jour - le problème ne survient que lors de l'utilisation de Virtual Environmanet et uniquement lors du contrôle du projet via le terminal fourni. Parce que le terminal fonctionne toujours via le pyhtonpath du système par défaut et non pas l’environnement virtuel. tandis que le panneau de contrôle de Django en python fonctionne bien.

0
RA123

l-s. un projet

Si vous avez someDirectory/someProjectDir et deux fichiers, file1.py et file2.py et file1.py essaie d'importer avec cette ligne

depuis un fichier importProjectDir2

Cela ne fonctionnera pas, même si vous avez désigné someProjectDir comme répertoire source et même s'il apparaît dans les préférences, dans le projet ou dans le menu de la structure du projet comme racine du contenu. La seule façon dont cela fonctionnera sera de lier le projet comme indiqué ci-dessus (commande unix, fonctionne sous mac, pas sûre de l’utilisation ou de la syntaxe sous Windows) . ou en tant que racine de contexte, puisque le lien symbolique a été créé par Pycharm dans un projet dépendant. Par conséquent, il suffit de copier le même, bien que la réplication étrange de répertoire soit ennuyeuse et que la nécessité déroute. De plus, dans la dépendance où créé automatiquement, il ne s'affiche pas comme nouveau répertoire sous contrôle de version. La comparaison des fichiers .idea en révélera peut-être plus. 

0
user10895922

J'ai reçu cette erreur lorsque le répertoire de travail n'était pas défini correctement. C'était très étrange, puisqu'il s'agissait d'une nouvelle installation, et je ne vois pas pourquoi PyCharm utiliserait un répertoire aléatoire comme répertoire de travail du projet, au lieu du répertoire racine.

0
Ruslan

Pycharm 2017.1.1

  1. Cliquez sur View->ToolBar & View->Tool Buttons
  2. Dans le volet gauche, Project serait visible, cliquez dessus avec le bouton droit de la souris et appuyez sur _____, puis Autoscroll to source.__ et exécutez votre code.

Cela a fonctionné pour moi.

0
AB Abhi