web-dev-qa-db-fra.com

Python ne trouve pas le module dans le même dossier

Mon python ne trouve pas de modules dans le même répertoire . Qu'est-ce que je fais mal? (python2.7)

Donc, j'ai un répertoire '2014_07_13_test', avec deux fichiers dedans: 

  1. test.py
  2. bonjour.py

où bonjour.py:

# !/usr/local/bin/python
# -*- coding: utf-8 -*-

def hello1():
    print 'HelloWorld!'

et test.py:

# !/usr/local/bin/python
# -*- coding: utf-8 -*-

from hello import hello1

hello1()

Python encore me donne 

>>> Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 4, in <module>
ImportError: No module named hello

Qu'est-ce qui ne va pas?

43
Philipp_Kats

Votre code est correct, je suppose que votre problème est de savoir comment vous le lancez.

Vous devez lancer python à partir de votre répertoire '2014_07_13_test'.

Ouvrez une invite de commande et «cd» dans votre répertoire «2014_07_13_test».

Par exemple:

$ cd /path/to/2014_07_13_test
$ python test.py

Si vous ne pouvez pas "cd" dans le répertoire, vous pouvez l'ajouter à sys.path

Dans test.py:

import sys, os
sys.path.append('/path/to/2014_07_13_test')

Ou définissez/modifiez le PYTHONPATH

Et tout devrait bien se passer ...

... Eh bien, il y a une légère erreur avec vos lignes 'Shebang' (la première ligne de vos deux fichiers), il ne devrait pas y avoir d'espace entre le '#' et le '!'

Il y a un meilleur Shebang vous devriez utiliser.

De plus, vous n'avez pas besoin de la ligne Shebang sur tous les fichiers, mais uniquement de ceux que vous souhaitez exécuter à partir de votre shell en tant que fichiers exécutables.

41
Jeremy Allen

Changez votre import dans test.py en:

from .hello import hello1
45
jfn

J'ai eu un problème similaire, je l'ai résolu en ajoutant explicitement le répertoire du fichier à la liste des chemins:

import os
import sys

file_dir = os.path.dirname(__file__)
sys.path.append(file_dir)

Après cela, je n'ai eu aucun problème à importer du même répertoire.

9
ecotner

Voici la solution générique que j'utilise. Il résout le problème d'importation depuis des modules dans le même dossier: 

import os.path
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))

Mettez ceci en haut du module, ce qui donne l'erreur "Aucun module nommé xxxx"

5
apadana

J'ai rencontré ce problème. J'avais trois dossiers dans le même répertoire, donc je devais spécifier quel dossier. Ex: depuis un script d'importation de dossier

0
Nippon87

En utilisant Pycharm ici, python 3:

Mon fichier s'appelait 'file_to_open'

Je l'ai changé pour 'FileToOpen' et cela a bien fonctionné.

Problème: n'aime probablement pas les traits de soulignement '_'

0
theBigCheese88

Dans mon cas, Python n'a pas pu le trouver car je mettrais le code dans un module avec des traits d'union, par exemple. my-module. Quand je l'ai changé pour my_module cela a fonctionné.

0
Chris Claxton