Parce qu'il y a un chemin à parcourir. Essayez ceci:
import sys
print sys.path
Cela devrait afficher tout le python endroits utilise comme direcctory de départ pour résoudre les emplacements de module. Ainsi, par exemple, si root
est en fait dans/home/PulpFiction/root (ou C: \ Documents and Settings \ PulpFiction \ Mes documents \ racine sur Windows), vous verrez quelque chose comme ceci:
['', '/usr/local/lib/python2.6/dist-packages', *more stuff*, '/home/PulpFiction/root']
ou sur les fenêtres:
['', 'C:\\python26\\site-packages', *more stuff here*, 'C:\Documents and Settings\PulpFiction\My Documents\root']
Il y a quelques façons sys.path
peuvent être définies (que je sache):
- le répertoire que vous exécutez le script à partir
- variable d'environnement (PYTHONPATH pour être exact)
- Registre Windows (sous Windows uniquement évidemment)
- manuellement un chemin annexant à la variable sys.path vous-même dans le code
Je devine que la raison pour laquelle il travailler pour vous est que vous avez un script dans root
(disons main.py
), et ce script finissent par importer à partir de x
et y
. Puisque vous exécutez le script dans le répertoire racine, il est ajouté au chemin python, ce qui permet à from x import test
de fonctionner.
EDIT
Il n'y a pas __init__.py
hein? Vous êtes sûr qu'il n'y a pas de __init__.pyc
là (notez le C en pyc)?
EDIT: J'ai compris cela, puisque mon script original commençait à partir de 'x', c'est pourquoi cela a fonctionné. – user225312