2016-05-24 9 views
1

Ich habe zwei Versionen von Python auf meiner Linux-Box 2.6 und 2.7 installiert, wie in der link Ich habe Python 2.7 in /usr/local/bin/ installiert und haben Alias ​​und aktualisierte PATH-Variable erstellt. Der 2.6 ist in/usr/bin/installiert.BASH Skript nachschlagen in/usr/bin

Danach, wenn ich die Python-Version überprüfen, zeigt es 2.7.3 auf dem Terminal, aber auf dem gleichen Terminal, wenn ich ein Bash-Skript (die Python-Version erkennen müssen), wird es als 2.6 angezeigt.

Wie sollte ich das Bash-Skript erzwingen, um auf Alias ​​oder/usr/local/bin für die Auswahl der richtigen Python-Version verweisen.

+0

Bitte stellen Sie das Bash-Skript zur Verfügung – piyushj

+0

Standardmäßig sieht es so aus, als würde Ihr Skript '/ usr/bin/python' betrachten, das eine symbolische Verbindung sein muss. Aktualisieren Sie diesen Link, um auf das Verzeichnis 2.7 zu zeigen, und es sollte alles eingestellt sein. –

+1

Ich empfehle dringend, ['virtualenv'] (https://virtualenv.pypa.io/en/stable/) zu verwenden – hek2mgl

Antwort

3

Sie haben einen Alias ​​in Ihrem Profil. Aliase werden jedoch beim Ausführen eines Skripts nicht mitgeführt.

Also, was Sie tun müssen, ist entweder den gesamten Pfad überall im Skript zu verwenden oder den Pfad am Anfang anzugeben.

#!/bin/bash 

PYTHON_PATH=/usr/local/bin 
MY_PYTHON=$PYTHON_PATH/python2.7.3 

Und dann rufen Sie es mögen:

$MY_PYTHON ... things 
+0

Normalerweise verwenden Sie 'virtualenv' für den Umgang mit mehreren Versionen von Python. – hek2mgl

+0

@ hek2mgl yep! Oder sogar Docker. Allerdings weiß ich im Rahmen eines Skripts nicht, ob es sinnvoll ist, so zu verfahren: Wird das Skript den vom aktiven virtualenv beschriebenen Python ausführen? – fedorqui

+1

Ich würde, und tat es in der Vergangenheit, 'source/Pfad/zu/virtualenv_name 'oben auf dem Skript. Einige Python-basierte Programme, zum Beispiel uwsgi, unterstützen sogar den Pfad zu einem virtualenv als Startup-Option – hek2mgl

0

Sie benötigen PATH zu aktualisieren. Dann können Sie wie folgt verwenden:

export PATH="/usr/local/bin:$PATH" 

Hinweis Ich bin auch usr/local/bin vor dem anderen Pfad Pfad einschließen, bevor es. Fügen Sie dies in ~/.bashrc oder ~/.bash_profile ein, damit Sie dies nicht bei jedem Öffnen einer neuen Shell tun müssen.

+0

Ich hatte bereits 'PATH' und root's .bashrc wie Sie angegeben haben. Das folgende ist das Echo meiner 'PATH'' # /usr/local/bin:/opt/rh/devtoolset-2/root/usr/bin:/usr/lib64/qt-3.3/bin:/usr/local/ bin:/usr/bin:/bin:/usr/lokal/sbin:/usr/sbin:/sbin:/home/panch/bin'. Trotzdem kam ich zu dem Fall, den ich in meiner Anfangsfrage beschrieben habe. – Panch

+0

@Panch Was ist deine Distribution? Ich kann das überhaupt nicht reproduzieren. – khrm

+0

Ich benutze 'Rhel 6.7' Testversion. 'Der uname -r gibt' 2.6.32-573.el6.x86_64' – Panch