【问题标题】:specify the python interpreter path in python script在 python 脚本中指定 python 解释器路径
【发布时间】:2017-10-19 15:57:51
【问题描述】:

我有一个 Python 脚本,分布在多个节点中。默认情况下,我在 /usr/bin 中安装了 python 2.6,并且在所有节点的 /opt 目录中都有 python 2.7。现在,当我从当前节点运行脚本时,我可以从终端设置 python 2.7 解释器的路径,但我无法在分发该脚本的其余节点中对其进行管理。我在脚本开头添加了 shebang,例如 -

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

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

【问题讨论】:

  • 这应该可以。你得到的错误是什么?脚本可执行吗?
  • 它仍然指向默认的python路径。所以它无法识别导入包。
  • “print sys.prefix”给你什么?如何调用脚本?
  • 您的问题可能不是正在使用的 interpreter,而是您的 PATH
  • 是的,所以我没有办法在其余节点中更新我的 python 路径。在其余节点中,python 路径设置为 python 2.6。有没有办法通过我的python脚本更新python路径?

标签: python python-2.7 pythonpath shebang


【解决方案1】:

您解释的内容应该有效,但请检查:

  • 脚本是可执行的(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) 

【讨论】:

  • 是的,问题是当 python 作业使用它分发时,其余机器中的默认解释器是 python 2.6。如何在代码本身中将工作指向 2.7 解释器。
  • 据我所知你不能,但可能有其他方法可以解决你的问题。两个问题:只能远程执行 Python 2.6 还是可以在 shell 中执行文件?您能否在远程节点中分发两个脚本而不是一个脚本?
  • 我将我的脚本作为 hive udf 分发,因此我的脚本分布在所有节点上并由 hive 执行。我假设 hive 在每个节点中使用默认解释器运行它,默认情况下指向 python 2.6。因此,虽然我们安装了 python 2.7,但由于它不在路径中,我们无法默认使用它来执行。
  • 那么您的问题与 Hive 及其处理 UDF 的方式更相关。我对 Hive 没有太多经验,但我会尝试使用类似 ADD FILE hdfs:///tmp/my_script.py; USE tmp; 的内容添加脚本(使用 shebang),然后:* 使用类似 ... USING 'my_script.py' ... 的内容调用它,或者 * 调用它指定完整路径蟒蛇... USING '/opt/python2.7/bin/python my_script.py' ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
  • 2011-08-21
  • 1970-01-01
  • 2015-11-13
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多