【问题标题】:No python interpreter found. Abort - Opscenter没有找到 python 解释器。中止 - Opscenter
【发布时间】:2016-06-26 11:27:13
【问题描述】:

只是想询问在我们的 opscenter rpm 上检查的可能性。启动 opscenter 时出现此错误

[opscenter@mybox]$ sudo /etc/init.d/opscenterd start
Starting Cassandra cluster manager opscenterd
Starting opscenterdNo python interpreter found. Abort.
[opscenter@mybox start-stop-scripts]$ cd            [FAILED]

我看到安装了 python,但不知道如何让 opscenter 指向这个位置

[opscenter@mybox ~]$ python -V ; which python
Python 2.7.1
/opt/mybox/pkg/python/bin/python

Opscenter 安装在 /opt/mybox/pkg/opscenter 上,我在 bin 中的 opscenter 文件中看到了一些变量

# get around sudo vagaries in setting $HOME
if [ "x$OPSC_HOME" = "x" ]; then
if [ $is_mac = 1 ]; then
    OPSC_HOME="/Users/$USER"
else
    OPSC_HOME=$(getent passwd $(id -u) | cut -d ':' -f 6)
fi
fi
export HOME=$OPSC_HOME

cd "$(dirname "$0")"/../

if [ $(uname -m) = "x86_64" ]; then
PY_ARCH="amd64"
else
PY_ARCH="i386"
fi

# we support python2.6-2.7
PYVERSIONS="2.6 2.7"

[ -z "$PYTHON" ] && \
for i in $PYVERSIONS; do
which python$i > /dev/null 2>&1 && PYTHON=$(which python$i)
done
[ -n "$PYTHON" ] || {
echo "No python interpreter found. Abort." >&2
exit 3
}

PY_VER=$($PYTHON -c "import platform; v = platform.python_version(); print     v[:v.index('.', 2)]")
 if [ $is_mac = 1 ]; then
 PY_DISTRO="./lib/py-osx/${PY_VER}/amd64" # always use 64bit for OS X
 elif [ -f "/etc/system-release" ]; then
 # This branch is for the Amazon Linux distribution
 # We will use the highest level "VER" available because Amazon Linux
 # does not use version numbers like RHEL and Centos
 VER=`ls -1 ./lib/py-redhat/${PY_VER}/ | sort -n | tail -n 1`
 PY_DISTRO="./lib/py-redhat/${PY_VER}/shared/${PY_ARCH}:./lib/py-redhat/${PY_VER}/${VER}/${PY_ARCH}"
elif [ -f "/etc/redhat-release" ]; then
VER=`rpm -q centos-release --qf %{VERSION}`
if [ 1 -eq $? ]; then
    VER=`rpm -q redhat-release --qf %{VERSION}` # RHEL 5
    if [ 1 -eq $? ]; then
        VER=`rpm -q redhat-release-server --qf %{VERSION}` # RHEL 6
        if [ 1 -eq $? ]; then
            VER=`rpm -q enterprise-release --qf %{VERSION}` # Oracle Linux
        fi
    fi
fi
VER=`echo $VER | cut -b 1`
PY_DISTRO="./lib/py-redhat/${PY_VER}/shared/${PY_ARCH}:./lib/py-redhat/${PY_VER}/${VER}/${PY_ARCH}"
else
 PY_DISTRO="./lib/py-debian/${PY_VER}/${PY_ARCH}"
 fi

export PYTHONPATH="./src:\
/usr/lib/python${PY_VER}/site-packages:\
./src/lib/python${PY_VER}/site-packages:\
./lib/python${PY_VER}/site-packages:\
./lib/py:\
${PY_DISTRO}:\
${PYTHONPATH}:"

【问题讨论】:

  • 在终端中运行which python2.7 会打印什么?
  • [opscenter@mybox ~]$ which python 2.7 /opt/mybox/pkg/python/bin/python /usr/bin/which: no 2.7 in (/usr/kerberos/bin:/opt /mybox/pkg/python/bin:/usr/local/bin:/bin:/usr/bin:/opt/mybox/pkg/opscenter/bin:/sbin:/usr/local/bin:/usr/bin)
  • 您在python2.7 之间放置了一个空格,所以which 认为它们是两个独立的命令。请在没有中间空格的情况下重试,并将结果粘贴到您的问题中的代码块中,以便保留格式。
  • [opscenter@mybox ~]$ which python2.7 /opt/mybox/pkg/python/bin/python2.7
  • 你能在 $PYVERSIONS 的 for i 中回显 $i 吗?我的shell有点生疏,不过最好for i in 2.6 2.7; do,引号可以让它不拆分字符串。

标签: python path opscenter


【解决方案1】:

不知道如何让 opscenter 指向这个位置

由于这是您的具体问题,我将在此处附上我的评论作为答案。

您可以在运行 opscenter 初始化脚本之前将 PYTHON 设置为您的 python 解释器。这将绕过对 python 2.6 或 2.7 的检查(通过 -z 测试)并允许您告诉脚本 python 在哪里。

$ export PYTHON=/opt/mybox/pkg/python/bin/python
$ sudo /etc/init.d/opscenterd start

至于发生这种情况的根本原因,我怀疑 PM 2Ring 是正确的,并且 python 不在启动 OpsCenter 的用户(似乎是 root)的路径上。

【讨论】:

    猜你喜欢
    • 2016-07-12
    • 2016-09-23
    • 2017-12-20
    • 1970-01-01
    • 2019-09-06
    • 2021-05-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    相关资源
    最近更新 更多