J'ai le paquet p
qui a les modules a
et b
. a
repose sur b
:Force l'importation du module à partir du répertoire courant
b.py
contenu:
import a
Cependant, je veux assurer que mon module b
importe des a
du même répertoire paquet p
et pas seulement un module a
de PYTHONPATH
.
Je suis en train de changer b.py
comme ce qui suit:
from . import a
Cela fonctionne aussi longtemps que j'importer b
quand je suis à l'extérieur du répertoire p
du package. Étant donné les fichiers suivants:
/tmp
/p
a.py
b.py
__init__.py
Les travaux suivants:
$ cd /tmp
$ echo 'import p.b' | python
Ce qui suit ne fonctionne pas:
$ cd /tmp/p
$ echo 'import b' | python
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "b.py", line 1, in <module>
from . import a
ValueError: Attempted relative import in non-package
Pourquoi?
P.S. J'utilise Python 2.7.3
n'utilisez pas les importations relatives implicites (elles sont passées en Python 3). Toujours utiliser l'import absolu ('de p import a' (ajouter' from __future__ import absolute_import' avant s'il y a un fichier 'p/p.py')) ou une importation relative explicite (' from. Import a' (si ce n'est pas le cas) un module '__main__')). N'exécutez pas de scripts à l'intérieur d'un répertoire de paquetages Python; il ajoute ce répertoire à sys.path, ce qui peut conduire à ce que le même module soit disponible sous des noms différents, ce qui conduit à des bogues liés à l'état du module (si vous utilisez des imports relatifs implicites, il masque également les autres modules). – jfs
Bonnes notes. Merci! –
Si vous re-postez est comme une réponse, je vais l'accepter. –