2017-10-19 2 views
0

J'ai un script python que je distribue sur plusieurs nœuds. J'ai python 2.6 installé dans/usr/bin par défaut et j'ai python 2.7 dans mon répertoire/opt dans tous les nœuds. Maintenant, quand j'exécute le script depuis mon noeud actuel, je peux définir le chemin vers l'interpréteur python 2.7 depuis le terminal mais je suis incapable de le gérer dans le reste des noeuds où ce script est distribué. J'ai ajouté le shebang au début du script comme -Spécifiez le chemin de l'interpréteur python dans le script python

#!/opt/python2.7/bin/python 

Mais il ne fonctionne toujours pas. Comment puis-je changer le chemin de l'interpréteur python/python au début du script lui-même.

+1

Cela devrait fonctionner. Quelle est l'erreur que vous obtenez? Le script est-il exécutable? – deets

+0

Il pointe toujours vers le chemin python par défaut. Donc, il est incapable d'identifier les paquets d'importation. –

+0

Que vous donne "print sys.prefix"? Comment invoquez-vous le script? – deets

Répondre

0

Ce que vous expliquez devrait fonctionner mais il faut vérifier:

  • que le script est exécutable (chmod +x my_script.py si nécessaire).
  • que vous appelez le script directement et n'utilisez pas d'autre interpréteur Python (vérifiez que vous exécutez ./my_script.py ou /path/my_script.py et non python my_script.py).

Pour aider à diagnostiquer le problème que vous pouvez ajouter les lignes suivantes en haut de votre script:

#!/opt/python2.7/bin/python 
import sys 
print(sys.executable) 

si la sortie n'est pas /opt/python2.7/bin/python que vous pourriez appellerez le script avec un autre interprète.

Si pour une raison quelconque, vous ne pouvez appeler des scripts exécutés par la version 2.6 de Python à distance, mais vous pouvez également distribuer des fichiers supplémentaires, vous pouvez essayer d'envoyer votre script principal quelque part et exécuter le script auxiliaire suivant:

from subprocess import call 
call("/opt/python2.7/bin/python /path/my_scipt.py", shell=True) 
+0

oui le problème est l'interpréteur par défaut dans le reste des machines est python 2.6 quand le travail python est distribué son utilisation en utilisant cela. Comment faire pour que le travail pointe vers l'interpréteur 2.7 dans le code lui-même. –

+0

Autant que je sache, vous ne pouvez pas, mais il peut y avoir d'autres moyens de résoudre votre problème. Deux questions: pouvez-vous seulement exécuter Python 2.6 à distance ou pouvez-vous exécuter des fichiers dans un shell? Pouvez-vous distribuer deux scripts au lieu d'un seul dans les nœuds distants? – nudomarinero

+0

Je distribue mon script en tant que ruche udf, donc mon script est distribué sur tous les nœuds et est exécuté par ruche. Ce que je suppose, c'est que hive l'exécute en utilisant un interpréteur par défaut dans chaque nœud qui pointe vers python 2.6 par défaut. Donc, bien que nous ayons installé python 2.7 mais comme il n'est pas dans le chemin, nous ne pouvons pas l'utiliser par défaut. –