在python脚本中指定python解释器路径

问题描述:

我有一个python脚本,我分布在几个节点中。我默认将python 2.6安装在/ usr/bin中,并且在所有节点的/ opt目录中都有python 2.7。现在,当我从当前节点运行脚本时,我可以从终端设置python 2.7解释器的路径,但是我无法在此脚本获得分布的其余节点中进行管理。我已经在脚本的开头添加了shebang,如 -在python脚本中指定python解释器路径

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

但它仍然无法正常工作。如何在脚本本身的开头更改python解释器/ python路径。

+1

这应该工作。你得到的错误是什么?脚本是否可执行? – deets

+0

它仍然指向默认的python路径。所以它无法识别导入包。 –

+0

“print sys.prefix”给你什么?你如何调用脚本? – deets

你解释什么应该工作,但检查:

  • 脚本是可执行文件(chmod +x my_script.py如果需要的话)。
  • 您直接调用脚本而不使用其他Python解释器(检查执行./my_script.py/path/my_script.py而不是python my_script.py)。

为了帮助诊断问题,你可以将下列行添加到您的脚本的顶部:

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

如果产量不/opt/python2.7/bin/python你可能会调用另一个解释脚本。

如果由于某种原因你只能调用由2.6版本的Python远程执行脚本,但你也可以分发其他文件,你可以尝试的地方把你的主脚本并执行以下辅助脚本:

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

是的问题是当python作业使用它分配它时,其余机器的默认解释器是python 2.6。我怎样才能让代码本身的工作指向2.7解释器。 –

+0

据我所知,你不能,但可能有其他方法来解决你的问题。 有两个问题:你只能远程执行Python 2.6还是可以在shell中执行文件? 您可以在远程节点中分发两个脚本而不是一个脚本吗? – nudomarinero

+0

我正在将我的脚本作为配置单元udf进行分发,因此我的脚本在所有节点中分散并由配置单元执行。我假设的是hive在默认情况下在每个指向python 2.6的节点中使用默认解释器运行它。所以尽管我们安装了python 2.7,但由于它不在路径中,所以我们无法默认使用它。 –