2009-02-05 9 views
1

Je développe mes trucs en python. Dans ce processus, j'ai rencontré une situation où j'ai une chaîne appelée "import django". Et je veux valider cette chaîne. Ce qui veut dire que je veux vérifier si le module mentionné ('django' dans ce cas) est dans le chemin python. Comment puis-je le faire?Exécuter une chaîne en tant que commande en python

+0

Êtes-vous écrit et interprète pour Python? Pourquoi auriez-vous besoin de valider le code Python? –

+0

Cela semble très dangereux. Vous pourriez vouloir expliquer pourquoi vous avez besoin de faire cela et voir si quelqu'un trouve une façon différente de l'accomplir. Aussi, je suppose que la chaîne n'est pas "appelée" "django d'importation", mais que c'est ce que son contenu est, non? – akaihola

+0

@akaihola: laissez-moi vous dire le cas d'utilisation. J'écris un vérificateur d'importation au niveau de l'application, qui va scanner tous les fichiers python pour les instructions d'import et va essayer de les valider, en les interférant individuellement. –

Répondre

14

Ma réponse précédente a eu tort - je ne pensais pas à tester mon code. Cela fonctionne réellement, cependant: regardez le module imp.

Pour vérifier juste pour le importability du module dans le sys.path actuel:

Si le nom d'un module
try: 
    imp.find_module('django', sys.path) 
except ImportError: 
    print "Boo! no django for you!" 
+0

+1 c'est la façon de le faire. – nosklo

+0

Nosklo & Yoni Samlan, j'ai les mêmes déclarations comme celles-ci: "de mysite.models import Blog" etc .. Donc, je voulais intrapant cette chaîne pour valider le scénario d'importation exacte. Donc je pense que je ne peux pas utiliser l'approche de Yoni. Puis-je? –

1

Je doub't qu'il est sûr, mais il est la solution la plus naïve:

try: 
    exec('import django') 
except ImportError: 
    print('no django') 
+0

Évitez d'utiliser exec quand vous le pouvez. – nosklo

1

est disponible sous forme de chaîne, vous pouvez l'importer en utilisant la fonction __import__ intégrée.

module = __import__("module name", {}, {}, [], -1) 

Par exemple,

os = __import__("os", {}, {}, [], -1) 
+0

Pour vérifier si le module est présent, vous devez envelopper dans try ... sauf ImportError. –

Questions connexes