rhel8에서 Python을 찾을 수 없습니다.

rhel8에서 Python을 찾을 수 없습니다.

RHEL8 가상 머신이 다음과 같은 간단한 Python 프로그램을 성공적으로 실행할 수 있도록 하려면 어떤 특정 구문이나 구성을 변경해야 합니까?

문제 정의:

간단한 Python 3 프로그램은 subprocess 모듈을 사용하여 또 다른 간단한 Python 3 프로그램을 호출합니다. Windows에서 실행하면 예상한 출력이 표시되지만 RHEL 8에서 실행하면 다음 오류가 표시됩니다.

b'/bin/sh: python: command not found\n'

두 가지 간단한 절차:

그 내용은 command_test.py다음과 같습니다:

import subprocess

def runShellCommand(commandToRun):
  proc = subprocess.Popen( commandToRun,cwd=None, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
  while True:
    line = proc.stdout.readline()
    if line:
      print(line)
    else:
      break

myCmd = "python call_me.py"
runShellCommand(myCmd)

그 내용은 call_me.py다음과 같습니다:

print("If you see this, then I was called correctly.")

성공적인 Windows 결과:

이 두 가지 간단한 프로그램은 아래와 같이 Windows에서 실행될 때 예상되는 결과를 제공합니다.

C:\path\to\somedir>python command_test.py
b'If you see this, then I was called correctly.\r\n'

Linux 오류 결과:

RHEL8 가상 머신에서 실행할 때 다음 오류 출력이 나타납니다.

[user@someVMSS000001 somedir]$ python command_test.py
b'/bin/sh: python: command not found\n'

그러나 두 번째 프로그램은 다음과 같이 터미널에서 직접 호출하면 잘 실행됩니다.

[user@someVMSS000001 somedir]$ python call_me.py
If you see this, then I was called correctly.

또한 아래와 같이 Python이 설치되어 있는지 터미널에서 확인할 때 Python이 실제로 설치되어 표시되는지 확인할 수도 있습니다.

[user@someVMSS000001 somedir]$ python --version
Python 3.8.12

클라우드 초기화 Python 설치 코드:

VM을 구성하는 cloud-init 파일의 다음 줄은 위 문제를 일으키는 python 구성을 정의합니다.

dnf install python3.8 -y
dnf remove python3.6 -y
rm -rf /usr/bin/python3
mv /usr/bin/python3.8 /usr/bin/python3

python3 --version

dnf install -y python3-setuptools
dnf install python3-pip -y

python3 -m pip install pyyaml
python3 -m pip install requests
python3 -m pip install awscli

#Set alias so python commands use python3
echo "alias python=python3" >> /etc/bashrc

dnf clean all
dnf update python3 -y

python3 --version

따라서 문제는 하위 프로세스 모듈이 rhel8에서 실행될 때 Python이 Python을 인식하지 못하는 것 같습니다.

답변1

대화형 bash 셸에서 python별칭을 통해 해결합니다.python3

별칭은 상속되지 않으므로 /bin/sh하위 프로세스에서 이를 확인할 수 없습니다. 비록 당신은할 수 있다쉘 상속을 통해 해결하기 위한 심볼릭 링크를 생성합니다 python. 가장 좋은 방법은 이를 명시적으로 지정하는 것입니다.python3PATHpython3

아래의 관련 토론을 참조하세요.RHEL 8의 Python

관련 정보