124 votes

L'importation de packages python à partir du répertoire local en interprète

Je suis en développement/test un paquet dans mon répertoire local. Je veux l'importer dans l'interpréteur (v2.5), mais sys.chemin d'accès ne comprend pas le répertoire courant. Maintenant, je vous tapez sys.path.insert(0,'.'). Est-il un meilleur moyen?

Aussi,

from . import mypackage

échoue avec ce message d'erreur:

ValueError: Attempted relative import in non-package

63voto

Alex Martelli Points 330805

Vous pouvez utiliser par rapport n'importe que dans un module qui à son tour a été importés comme partie d'un package -- votre script interactif ou un interprète n'était pas le cas, bien sûr, from . import (ce qui signifie "importer à partir de la même package que j'ai importé à partir de") ne fonctionne pas. import mypackage sera bien une fois que vous assurer que le répertoire parent de l' mypackage est sys.path (comment vous avez réussi à obtenir votre répertoire courant à l'écart de sys.path je ne sais pas -- avez-vous quelque chose d'étrange dans site.py ou...?)

Pour obtenir votre répertoire courant de retour en sys.path il y a en effet pas de meilleur moyen que de le mettre là;-).

22voto

Keep it simple, stupid:

 try:
     from . import mymodule     # "myapp" case
 except:
     import mymodule            # "__main__" case

21voto

SpoonMeiser Points 6211

Consultez la documentation pour sys.chemin d'accès:

http://docs.python.org/library/sys.html#sys.path

Pour citer:

Si le script d'annuaire n'est pas disponible (par exemple, si l'interprète est appelé de manière interactive ou si le script est lu à partir de l'entrée standard), chemin[0] est la chaîne vide, qui dirige Python pour les modules de recherche dans le répertoire courant de la première.

Donc, il n'y a pas besoin de singe avec sys.chemin d'accès si vous utilisez l'interpréteur python à partir du répertoire contenant votre module.

Aussi, pour importer votre colis, il suffit de faire:

import mypackage

Depuis le répertoire contenant le paquet est déjà dans sys.chemin d'accès, il devrait fonctionner correctement.

6voto

bradley.ayers Points 13360

Une façon simple de le faire est d'exécuter votre script à partir du répertoire parent à l'aide de python -m drapeau, par exemple, python -m packagename.scriptname. Évidemment, dans cette situation, vous avez besoin d'un __init__.py le fichier à transformer votre répertoire dans un package.

4voto

sunqiang Points 4599

pas mal, Mais sys.chemin d'accès doit inclure répertoire courant déjà.
Edit: l'importation . (ou de . importation sth) peut-être pas une bonne pratique, pourquoi ne pas simplement importer mypackage

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X