동적 프로그래밍 언어 설치 및 사용

Red Hat Enterprise Linux 9

Red Hat Enterprise Linux 9에서 Python 및 PHP 설치 및 사용

Red Hat Customer Content Services

초록

Python 3을 설치 및 사용하고, Python 3 RPM을 패키징하고, Python 스크립트에서 인터프리터 지시문을 처리하는 방법을 알아봅니다. PHP 스크립팅 언어를 설치하고, Apache HTTP 서버 또는 ngninx 웹 서버와 함께 PHP를 사용하고 명령줄 인터페이스에서 PHP 스크립트를 실행합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.

Red Hat 문서에 관한 피드백 제공

문서에 대한 피드백에 감사드립니다. 어떻게 개선할 수 있는지 알려주십시오.

Jira를 통해 피드백 제출 (등록 필요)

  1. Jira 웹 사이트에 로그인합니다.
  2. 상단 탐색 모음에서 생성 을 클릭합니다.
  3. Summary (요약) 필드에 설명 제목을 입력합니다.
  4. Description (설명) 필드에 개선을 위한 제안을 입력합니다. 문서의 관련 부분에 대한 링크를 포함합니다.
  5. 대화 상자 하단에서 생성 을 클릭합니다.

1장. Python 소개

Python은 개체 지향, 필수, 기능 및 절차적 패러다임과 같은 여러 프로그래밍 패러다임을 지원하는 고급 프로그래밍 언어입니다. Python에는 동적 의미 체계가 있으며 일반 목적의 프로그래밍에 사용할 수 있습니다.

Red Hat Enterprise Linux를 사용하면 시스템 툴, 데이터 분석용 툴 또는 웹 애플리케이션을 제공하는 패키지와 같이 시스템에 설치된 많은 패키지가 Python으로 작성됩니다. 이러한 패키지를 사용하려면 python* 패키지가 설치되어 있어야 합니다.

1.1. Python 버전

Python 3.9 는 RHEL 9의 기본 Python 구현입니다. Python 3.9 는 BaseOS 리포지토리의 비모형 python3 RPM 패키지로 배포되며 일반적으로 기본적으로 설치됩니다. Python 3.9 는 RHEL 9의 전체 라이프 사이클 동안 지원됩니다.

Python 3 의 추가 버전은 마이너 RHEL 9 릴리스의 AppStream 리포지토리를 통해 라이프 사이클이 더 짧은 비모형 RPM 패키지로 배포됩니다. Python 3.9를 사용하여 이러한 추가 Python 3 버전을 병렬로 설치할 수 있습니다.

Python 2 는 RHEL 9와 함께 배포되지 않습니다.

표 1.1. RHEL 9의 Python 버전

버전설치할 패키지명령 예사용 가능 since라이프 사이클

Python 3.9

python3

python3, pip3

RHEL 9.0

전체 RHEL 9

Python 3.11

python3.11

python3.11, pip3.11

RHEL 9.2

더 짧음

Python 3.12

python3.12

python3.12, pip3.12

RHEL 9.4

더 짧음

지원 기간에 대한 자세한 내용은 Red Hat Enterprise Linux 라이프 사이클Red Hat Enterprise Linux Application Streams 라이프 사이클을 참조하십시오.

1.2. RHEL 8 이후 Python 에코시스템의 주요 차이점

다음은 RHEL 8과 비교하여 RHEL 9의 Python 에코시스템의 주요 변경 사항입니다.

버전이 없는 python 명령

python 명령(/usr/bin/python)의 버전이 지정되지 않은 형식인 python-unversioned-command 패키지에서 사용할 수 있습니다. 일부 시스템에서는 이 패키지가 기본적으로 설치되지 않습니다. python 명령의 버전되지 않은 양식을 수동으로 설치하려면 dnf install /usr/bin/python 명령을 사용합니다.

RHEL 9에서 Python 명령의 버전이 없는 형식은 기본 Python 3.9 버전을 가리키며 python 3 및 python 3.9 명령과 동일합니다. RHEL 9에서는 버전이 없는 명령이 Python 3.9 와 다른 버전을 가리키도록 구성할 수 없습니다.

python 명령은 대화형 세션을 위한 것입니다. 프로덕션에서는 python3,python3.9,python3.11 또는 python3.12 를 명시적으로 사용하는 것이 좋습니다.

dnf remove /usr/bin/python 명령을 사용하여 버전이 없는 python 명령을 설치 제거할 수 있습니다.

다른 python 또는 python3 명령이 필요한 경우 /usr/local/bin 또는 ~/.local/bin 에서 사용자 지정 심볼릭 링크를 생성하거나 Python 가상 환경을 사용할 수 있습니다.

python3-pip 패키지의 /usr/bin/pip 와 같은 다른 몇 가지 버전이 없는 명령을 사용할 수 있습니다. RHEL 9에서는 버전이 없는 모든 명령이 기본 Python 3.9 버전을 가리킵니다.

아키텍처별 Python 앰퍼 니스

RHEL 9에 구축된 아키텍처별 Python wheel은 업스트림 아키텍처 이름 지정을 새로 준수하므로 고객은 RHEL 9 에서 Python wheel을 빌드하고 RHEL이 아닌 시스템에 설치할 수 있습니다. 이전 RHEL 릴리스를 기반으로 빌드된 Python 소인쇄는 최신 버전과 호환되며 RHEL 9에 설치할 수 있습니다. 이는 아키텍처별 순수 Python 코드가 있는 Python wheel이 아닌 각 아키텍처에 대해 빌드된 Python 확장이 포함된 wheel에만 영향을 미칩니다.

2장. Python 설치 및 사용

RHEL 9에서 Python 3.9 는 기본 Python 구현입니다. RHEL 9.2부터 Python 3.11python3.11 패키지 제품군으로 사용할 수 있으며 RHEL 9.4, Python 3.12python3.12 패키지 제품군으로 제공됩니다.

버전이 지정되지 않은 python 명령은 기본 Python 3.9 버전을 가리킵니다.

2.1. Python 3 설치

기본 Python 구현은 일반적으로 기본적으로 설치됩니다. 수동으로 설치하려면 다음 절차를 사용하십시오.

절차

  • Python 3.9 를 설치하려면 다음을 사용하십시오.

    # dnf install python3
  • Python 3.11 을 설치하려면 다음을 사용하십시오.

    # dnf install python3.11
  • Python 3.12 를 설치하려면 다음을 사용합니다.

    # dnf install python3.12

검증 단계

  • 시스템에 설치된 Python 버전을 확인하려면 필요한 Python 버전에 특정 python 명령과 함께 --version 옵션을 사용합니다.
  • Python 3.9 의 경우:

    $ python3 --version
  • Python 3.11 의 경우:

    $ python3.11 --version
  • Python 3.12 의 경우:

    $ python3.12 --version

2.2. 추가 Python 3 패키지 설치

python3- 이 접두사로 지정된 패키지에는 기본 Python 3.9 버전에 대한 애드온 모듈이 포함되어 있습니다. python3.11- 접두사가 붙은 패키지에는 Python 3.11 용 애드온 모듈이 포함되어 있습니다. python3.12- 접두사가 붙은 패키지에는 Python 3.12 용 애드온 모듈이 포함되어 있습니다.

절차

  • Python 3.9 에 대한 Requests 모듈을 설치하려면 다음을 사용합니다.

    # dnf install python3-requests
  • Python 3.9 에서 pip 패키지 설치 프로그램을 설치하려면 다음을 사용하십시오.

    # dnf install python3-pip
  • Python 3.11 에서 pip 패키지 설치 프로그램을 설치하려면 다음을 사용하십시오.

    # dnf install python3.11-pip
  • Python 3.12 에서 pip 패키지 설치 프로그램을 설치하려면 다음을 사용합니다.

    # dnf install python3.12-pip

2.3. 개발자를 위한 추가 Python 3 툴 설치

개발자용 추가 Python 툴은 대부분 CodeReady Linux Builder(CRB) 리포지토리를 통해 배포됩니다.

python3-pytest 패키지 및 해당 종속 항목은 AppStream 리포지토리에서 사용할 수 있습니다.

CRB 리포지토리에는 다음과 같은 패키지가 포함되어 있습니다.

  • python3*-idle
  • python3*-debug
  • python3*-Cython
  • python3.11-pytest 및 해당 종속 항목
  • python3.12-pytest 및 해당 종속성.
중요

CodeReady Linux Builder 리포지토리의 콘텐츠는 Red Hat에서 지원하지 않습니다.

참고

모든 업스트림 Python이 RHEL에서 제공되는 것은 아닙니다.

CRB 리포지토리에서 패키지를 설치하려면 다음 절차를 사용하십시오.

절차

  1. CodeReady Linux Builder 리포지토리를 활성화합니다.

    # subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms
  2. python3*-Cython 패키지를 설치합니다.

    • Python 3.9 의 경우:

      # dnf install python3-Cython
    • Python 3.11 의 경우:

      # dnf install python3.11-Cython
    • Python 3.12 의 경우:

      # dnf install python3.12-Cython

2.4. Python 사용

다음 절차에는 Python 인터프리터 또는 Python관련 명령 실행 예제가 포함되어 있습니다.

사전 요구 사항

  • Python 이 설치되어 있는지 확인합니다.
  • Python 3.11 또는 Python 3.12 용 타사 애플리케이션을 다운로드하여 설치하려면 python3.11-pip 또는 python3.12-pip 패키지를 설치합니다.

절차

  • Python 3.9 인터프리터 또는 관련 명령을 실행하려면 다음을 사용하십시오. 예를 들면 다음과 같습니다.

    $ python3
    $ python3 -m venv --help
    $ python3 -m pip install package
    $ pip3 install package
  • Python 3.11 인터프리터 또는 관련 명령을 실행하려면 다음을 사용합니다. 예를 들면 다음과 같습니다.

    $ python3.11
    $ python3.11 -m venv --help
    $ python3.11 -m pip install package
    $ pip3.11 install package
  • Python 3.12 인터프리터 또는 관련 명령을 실행하려면 다음을 사용합니다. 예를 들면 다음과 같습니다.

    $ python3.12
    $ python3.12 -m venv --help
    $ python3.12 -m pip install package
    $ pip3.12 install package

3장. Python 3 RPM 패키징

pip 설치 프로그램을 사용하거나 DNF 패키지 관리자를 사용하여 업스트림 PyPI 리포지토리에서 시스템에 Python 패키지를 설치할 수 있습니다. DNF는 소프트웨어에 대한 다운스트림 제어를 제공하는 RPM 패키지 형식을 사용합니다.

네이티브 Python 패키지의 패키징 형식은 Python Packaging Authority (PyPA) 사양으로 정의됩니다. 대부분의 Python 프로젝트는 패키징에 distutils 또는 setuptools 유틸리티를 사용하고 setup.py 파일에서 정의된 패키지 정보를 사용합니다. 그러나 기본 Python 패키지를 만들 가능성이 시간이 지남에 따라 발전했습니다. 새로운 패키징 표준에 대한 자세한 내용은 pyproject-rpm-macros 를 참조하십시오.

이 장에서는 setup.py 를 RPM 패키지로 사용하는 Python 프로젝트를 패키징하는 방법을 설명합니다. 이 방법은 네이티브 Python 패키지와 비교하여 다음과 같은 이점을 제공합니다.

  • Python 및 비 Python 패키지에 대한 종속 항목을 사용할 수 있으며 DNF 패키지 관리자가 엄격하게 적용할 수 있습니다.
  • 패키지를 암호화 방식으로 서명할 수 있습니다. 암호화 서명을 사용하면 RPM 패키지의 콘텐츠를 나머지 운영 체제와 검증, 통합 및 테스트할 수 있습니다.
  • 빌드 프로세스 중에 테스트를 실행할 수 있습니다.

3.1. Python 패키지에 대한 SPEC 파일 설명

SPEC 파일에는 rpmbuild 유틸리티가 RPM을 빌드하는 데 사용하는 지침이 포함되어 있습니다. 지침은 여러 섹션에 포함되어 있습니다. SPEC 파일에는 섹션이 정의된 두 가지 주요 부분이 있습니다.

  • Preamble (본문에 사용되는 일련의 메타데이터 항목 포함)
  • 본문(명령의 주요 부분 포함)

Python 프로젝트의 RPM SPEC 파일에는 Python이 아닌 SPEC 파일에 비해 몇 가지 구체적인 내용이 있습니다.

중요

Python 라이브러리의 RPM 패키지 이름에는 항상 python3-, python3.11- 또는 python3.12- 접두사가 포함되어야 합니다.

기타 세부 사항은 python3*-pello 패키지에 대한 다음 SPEC 파일 예제에 표시되어 있습니다. 이러한 세부 사항에 대한 설명은 예제 아래의 노트를 참조하십시오.

Python으로 작성된 pello 프로그램의 SPEC 파일의 예

%global python3_pkgversion 3.11                                       1

Name:           python-pello                                          2
Version:        1.0.2
Release:        1%{?dist}
Summary:        Example Python library

License:        MIT
URL:            https://github.com/fedora-python/Pello
Source:         %{url}/archive/v%{version}/Pello-%{version}.tar.gz

BuildArch:      noarch
BuildRequires:  python%{python3_pkgversion}-devel                     3

# Build dependencies needed to be specified manually
BuildRequires:  python%{python3_pkgversion}-setuptools

# Test dependencies needed to be specified manually
# Also runtime dependencies need to be BuildRequired manually to run tests during build
BuildRequires:  python%{python3_pkgversion}-pytest >= 3


%global _description %{expand:
Pello is an example package with an executable that prints Hello World! on the command line.}

%description %_description

%package -n python%{python3_pkgversion}-pello                         4
Summary:        %{summary}

%description -n python%{python3_pkgversion}-pello %_description


%prep
%autosetup -p1 -n Pello-%{version}


%build
# The macro only supported projects with setup.py
%py3_build                                                            5


%install
# The macro only supported projects with setup.py
%py3_install


%check                                                                6
%{pytest}


# Note that there is no %%files section for the unversioned python module
%files -n python%{python3_pkgversion}-pello
%doc README.md
%license LICENSE.txt
%{_bindir}/pello_greeting

# The library files needed to be listed manually
%{python3_sitelib}/pello/

# The metadata files needed to be listed manually
%{python3_sitelib}/Pello-*.egg-info/

1
python3_pkgversion 매크로를 정의하면 이 패키지가 빌드할 Python 버전을 설정합니다. 기본 Python 버전 3.9를 빌드하려면 매크로를 기본값 3 으로 설정하거나 행을 완전히 제거합니다.
2
Python 프로젝트를 RPM에 패키징할 때 항상 프로젝트의 원래 이름에 python- 접두사를 추가합니다. 원래 이름은 pello 이므로 Source RPM (SRPM)의 이름은 python-pello 입니다.
3
BuildRequires 는 이 패키지를 빌드하고 테스트하는 데 필요한 패키지를 지정합니다. BuildRequires 에서 항상 Python 패키지를 빌드하는 데 필요한 도구를 제공하는 항목이 포함되어 있습니다. python3-devel (또는 python3.11-devel 또는 python3.12-devel)과 같은 특정 소프트웨어에 필요한 관련 프로젝트 (예: python3-setuptools 또는 python3.11-setuptools ) 또는 %check 섹션에서 테스트를 실행하는 데 필요한 런타임 및 테스트 종속 항목을 포함합니다.
4
바이너리 RPM의 이름(사용자가 설치할 수 있는 패키지)을 선택할 때 버전 지정된 Python 접두사를 추가합니다. 기본 Python 3.9, Python 3.11용 python3.11- 접두사 또는 Python 3.12용 python3.12- 접두사에 python3- 접두사를 사용합니다. 명시적 버전으로 설정하지 않는 한 기본 Python 버전 3.9에 대해 3 으로 평가되는 %{python3_pkgversion} 매크로를 사용할 수 있습니다(예: 3.11 참조).
5
%py3_build%py3_install 매크로는 각각 setup.py buildsetup.py install 명령을 실행하여 설치 위치, 사용할 인터프리터를 지정하는 추가 인수와 함께 실행합니다.
6
%check 섹션에서는 패키지 프로젝트의 테스트를 실행해야 합니다. 정확한 명령은 프로젝트 자체에 따라 달라지지만 %pytest 매크로를 사용하여 RPM 친화적인 방식으로 pytest 명령을 실행할 수 있습니다.

3.2. Python 3 RPM의 일반적인 매크로

SPEC 파일에서는 항상 값을 하드 코딩하지 않고 다음 Macros for Python 3 RPMs 테이블에 설명된 매크로를 사용합니다. SPEC 파일 상단에 python3_pkgversion 매크로를 정의하여 이러한 매크로에서 어떤 Python 3 버전이 사용되는지 확인할 수 있습니다( 3.1절. “Python 패키지에 대한 SPEC 파일 설명”참조). python3_pkgversion 매크로를 정의하는 경우 다음 표에 설명된 매크로 값은 지정된 Python 3 버전을 반영합니다.

표 3.1. Python 3 RPM용 매크로

매크로일반 정의설명

%{python3_pkgversion}

3

다른 모든 매크로에서 사용하는 Python 버전입니다. Python 3.11 을 사용하거나 3.12로 Python 3.12 를 사용하도록 3.11로 다시 정의할 수 있습니다.

%{python3}

/usr/bin/python3

Python 3 인터프리터

%{python3_version}

3.9

Python 3 인터프리터의 major.minor 버전

%{python3_sitelib}

/usr/lib/python3.9/site-packages

pure-Python 모듈이 설치된 위치

%{python3_sitearch}

/usr/lib64/python3.9/site-packages

아키텍처별 확장 모듈을 포함하는 모듈이 설치된 위치

%py3_build

 

RPM 패키지에 적합한 인수와 함께 setup.py build 명령 실행

%py3_install

 

RPM 패키지에 적합한 인수와 함께 setup.py install 명령 실행

%{py3_shebang_flags}

s

Python 인터프리터 지시문 매크로, %py3_shebang_fix의 기본 플래그 세트

%py3_shebang_fix

 

Python 인터프리터 지시문을 #! %{python3} 로 변경하고 기존 플래그(있는 경우)를 유지하고 %{py3_shebang_flags} 매크로에 정의된 플래그를 추가합니다.

3.3. Python RPM에 자동 생성된 종속 항목 사용

다음 절차에서는 Python 프로젝트를 RPM으로 패키징할 때 자동으로 생성된 종속 항목을 사용하는 방법을 설명합니다.

사전 요구 사항

절차

  1. 업스트림 제공 메타데이터가 포함된 다음 디렉터리 중 하나가 결과 RPM에 포함되어 있는지 확인합니다.

    • .dist-info
    • .egg-info

      RPM 빌드 프로세스는 다음과 같이 이러한 디렉터리에서 제공하는 가상 pythonX.Ydist 를 자동으로 생성합니다.

      python3.9dist(pello)

      그런 다음 Python 종속성 생성기는 업스트림 메타데이터를 읽고 생성된 pythonX.Ydist 가상 기능을 사용하여 각 RPM 패키지에 대한 런타임 요구 사항을 생성합니다. 예를 들어 생성된 요구 사항 태그는 다음과 같을 수 있습니다.

      Requires: python3.9dist(requests)
  2. 생성된 요구 사항을 검사합니다.
  3. 생성된 요구 중 일부를 제거하려면 다음 방법 중 하나를 사용합니다.

    1. SPEC 파일의 %prep 섹션에서 업스트림 제공 메타데이터를 수정합니다.
    2. 업스트림 설명서에 설명된 종속성을 자동 필터링하여 사용합니다.
  4. 자동 종속성 생성기를 비활성화하려면 기본 패키지의 %description 선언 위에 %{?python_disable_dependency_generator} 매크로를 포함합니다.

4장. Python 스크립트에서 인터프리터 지시문 처리

Red Hat Enterprise Linux 9에서는 실행 가능한 Python 스크립트는 최소 주요 Python 버전에서 명시적으로 지정하는 인터프리터 지시문( hashbangs 또는 shebangs라고도 함)을 사용해야 합니다. 예를 들어 다음과 같습니다.

#!/usr/bin/python3
#!/usr/bin/python3.9
#!/usr/bin/python3.11
#!/usr/bin/python3.12

RPM 패키지를 빌드할 때 /usr/lib/rpm/redhat/brp-mangle-shebangs BRP(Buildroot 정책) 스크립트를 자동으로 실행하고 모든 실행 파일에서 인터프리터 지시문을 수정하려고 시도합니다.

BRP 스크립트는 다음과 같은 모호한 인터프리터 지시문을 사용하여 Python 스크립트를 시작할 때 오류를 생성합니다.

#!/usr/bin/python

또는

#!/usr/bin/env python

4.1. Python 스크립트에서 인터프리터 지시문 수정

다음 절차에 따라 RPM 빌드 시 빌드 오류가 발생하는 Python 스크립트에서 인터프리터 지시문을 수정합니다.

사전 요구 사항

  • Python 스크립트의 인터프리터 지시문 중 일부는 빌드 오류가 발생합니다.

절차

  • 인터프리터 지시문을 수정하려면 다음 작업 중 하나를 완료합니다.

    • SPEC 파일의 %prep 섹션에서 다음 매크로를 사용합니다.

      # %py3_shebang_fix SCRIPTNAME …​

      SCRIPTNAME 은 모든 파일, 디렉터리 또는 파일 및 디렉터리 목록일 수 있습니다.

      결과적으로 나열된 디렉터리의 모든 파일 및 모든 .py 파일은 %{python3} 을 가리키도록 인터프리터 지시문을 수정합니다. 원래 인터프리터 지시문의 기존 플래그는 보존되고 %{py3_shebang_flags} 매크로에 정의된 추가 플래그가 추가됩니다. SPEC 파일에서 %{py3_shebang_flags} 매크로를 재정의하여 추가할 플래그를 변경할 수 있습니다.

    • python3-devel 패키지에서 pathfix.py 스크립트를 적용합니다.

      # pathfix.py -pn -i %{python3} PATH …​

      여러 경로를 지정할 수 있습니다. PATH 가 디렉터리인 경우 pathfix.py 는 모호한 인터프리터 지시문이 있는 것뿐만 아니라 ^[a-zA-Z0-9_]+\.py$ 패턴과 일치하는 Python 스크립트를 반복적으로 검사합니다. 위의 명령을 %prep 섹션에 추가하거나 %install 섹션의 끝에 추가합니다.

    • 패키지된 Python 스크립트를 수정하여 예상 형식을 준수하도록 합니다. 이를 위해 RPM 빌드 프로세스 외부의 pathfix.py 스크립트도 사용할 수 있습니다. RPM 빌드 외부에서 pathfix.py 를 실행하는 경우 이전 예제의 %{python3}/usr/bin/python3 또는 /usr/bin/python3.11 과 같은 인터프리터 지시문의 경로로 바꿉니다.

추가 리소스

5장. Tcl/Tk 설치

5.1. 소개 Tcl/Tk

TCL은 동적 프로그래밍 언어이지만 Tk 는 GUI(그래픽 사용자 인터페이스) 툴킷입니다. 그래픽 인터페이스를 사용하여 플랫폼 간 애플리케이션을 개발하기 위한 강력하고 사용하기 쉬운 플랫폼을 제공합니다. 동적 프로그래밍 언어인 'Tcl'은 스크립트 작성을 위한 단순하고 유연한 구문을 제공합니다. tcl 패키지는 이 언어 및 C 라이브러리에 대한 인터프리터를 제공합니다. 그래픽 인터페이스를 생성하기 위한 툴 및 위젯 세트를 제공하는 GUI 툴킷으로 Tk 를 사용할 수 있습니다. 그림 그래픽을 위해 버튼, 메뉴, 대화 상자, 텍스트 상자 및 캔버스와 같은 다양한 사용자 인터페이스 요소를 사용할 수 있습니다. TK 는 많은 동적 프로그래밍 언어를 위한 GUI입니다.

Tcl/Tk에 대한 자세한 내용은 Tcl/Tk 설명서 또는 Tcl/Tk 설명서 웹 페이지를 참조하십시오.

5.2. Tcl 설치

기본 Tcl 구현은 일반적으로 기본적으로 설치됩니다. 수동으로 설치하려면 다음 절차를 사용하십시오.

절차

  • Tcl 을 설치하려면 다음을 사용합니다.

    # dnf install tcl

검증 단계

  • 시스템에 설치된 Tcl 버전을 확인하려면 인터프리터 tclsh 를 실행합니다.

    $ tclsh
  • 인터프리터에서 다음 명령을 실행합니다.

    % info patchlevel
    8.6
  • Ctrl+C를 눌러 인터프리터 인터페이스를 종료할 수 있습니다.

5.3. Tk 설치

기본 Tk 구현은 일반적으로 기본적으로 설치됩니다. 수동으로 설치하려면 다음 절차를 사용하십시오.

절차

  • Tk 를 설치하려면 다음을 사용합니다.

    # dnf install tk

검증 단계

  • 시스템에 설치된 Tk 버전을 확인하려면 window shell wish 를 실행합니다. 그래픽 디스플레이를 실행해야 합니다.

    $ wish
  • 쉘에서 다음 명령을 실행합니다.

    % puts $tk_version
    8.6
  • Ctrl+C를 눌러 인터프리터 인터페이스를 종료할 수 있습니다.

6장. PHP 스크립팅 언어 사용

하이퍼텍스트 사전 프로세서(PHP)는 주로 서버 측 스크립팅에 사용되는 범용 스크립팅 언어입니다. PHP를 사용하여 웹 서버를 사용하여 PHP 코드를 실행할 수 있습니다.

6.1. PHP 스크립팅 언어 설치

RHEL 9에서는 PHP를 다음 버전 및 형식으로 사용할 수 있습니다.

  • PHP 8.0 as the php RPM package
  • PHP 8.1 as the php:8.1 module stream
  • php:8.2 모듈 스트림로서의 PHP 8.2

절차

시나리오에 따라 다음 단계 중 하나를 완료합니다.

  • PHP 8.0을 설치하려면 다음을 입력합니다.

    # dnf install php
  • 기본 프로필이 있는 php:8.1 또는 php:8.2 모듈 스트림을 설치하려면 다음과 같이 입력합니다.

    # dnf module install php:8.1

    기본 common 프로필은 php-fpm 패키지도 설치하고 Apache HTTP Server 또는 nginx와 함께 사용할 수 있도록 PHP를 사전 구성합니다.

  • php:8.1 또는 php:8.2 모듈 스트림의 특정 프로필을 설치하려면 예를 들면 다음과 같습니다.

    # dnf module install php:8.1/profile

    사용 가능한 프로필은 다음과 같습니다.

    • common - 웹 서버를 사용하여 서버 쪽 스크립팅의 기본 프로필입니다. 가장 널리 사용되는 확장 기능을 포함합니다.
    • 최소 - 이 프로필은 웹 서버를 사용하지 않고 PHP로 스크립팅하기 위한 명령줄 인터페이스만 설치합니다.
    • devel - 이 프로필에는 공통 프로필의 패키지와 개발을 위한 추가 패키지가 포함되어 있습니다.

      예를 들어 웹 서버 없이 사용하기 위해 PHP 8.1을 설치하려면 다음을 사용합니다.

      # dnf module install php:8.1/minimal

6.2. 웹 서버에서 PHP 스크립팅 언어 사용

6.2.1. Apache HTTP Server에서 PHP 사용

Red Hat Enterprise Linux 9에서 Apache HTTP Server 를 사용하면 PHP를 FastCGI 프로세스 서버로 실행할 수 있습니다. FastCGI Process Manager (FPM)는 웹 사이트가 높은 부하를 관리 할 수있는 대체 PHP FastCGI 데몬입니다. PHP는 RHEL 9에서 기본적으로 FastCGI Process Manager를 사용합니다.

FastCGI 프로세스 서버를 사용하여 PHP 코드를 실행할 수 있습니다.

사전 요구 사항

  • PHP 스크립팅 언어가 시스템에 설치되어 있습니다.

절차

  1. httpd 패키지를 설치합니다.

    # dnf install httpd
  2. Apache HTTP Server 를 시작합니다.

    # systemctl start httpd

    또는 시스템에서 Apache HTTP Server 가 이미 실행 중인 경우 PHP를 설치한 후 httpd 서비스를 다시 시작합니다.

    # systemctl restart httpd
  3. php-fpm 서비스를 시작합니다.

    # systemctl start php-fpm
  4. 선택 사항: 두 서비스 모두 부팅 시 시작되도록 활성화합니다.

    # systemctl enable php-fpm httpd
  5. PHP 설정에 대한 정보를 얻으려면 /var/www/html/ 디렉터리에 다음 콘텐츠를 사용하여 index.php 파일을 생성합니다.

    # echo '<?php phpinfo(); ?>' > /var/www/html/index.php
  6. index.php 파일을 실행하려면 브라우저가 다음을 가리키도록 합니다.

    http://<hostname>/
  7. 선택 사항: 특정 요구 사항이 있는 경우 구성을 조정합니다.

    • /etc/httpd/conf/httpd.conf - generic httpd configuration
    • /etc/httpd/conf.d/php.conf - httpd에 대한 PHP 특정 설정
    • /usr/lib/systemd/system/httpd.service.d/php-fpm.conf - 기본적으로 php-fpm 서비스가 httpd로 시작됩니다.
    • /etc/php-fpm.conf - FPM 메인 구성
    • /etc/php-fpm.d/www.conf - 기본 WWW 풀 구성

예 6.1. "Hello, World!"를 실행합니다. Apache HTTP Server를 사용한 PHP 스크립트

  1. /var/www/html/ 디렉터리에 프로젝트의 hello 디렉터리를 만듭니다.

    # mkdir hello
  2. 다음 콘텐츠를 사용하여 /var/www/html/hello/ 디렉터리에 hello.php 파일을 생성합니다.

    # <!DOCTYPE html>
    <html>
    <head>
    <title>Hello, World! Page</title>
    </head>
    <body>
    <?php
        echo 'Hello, World!';
    ?>
    </body>
    </html>
  3. Apache HTTP Server 를 시작합니다.

    # systemctl start httpd
  4. hello.php 파일을 실행하려면 브라우저가 다음을 가리키도록 합니다.

    http://<hostname>/hello/hello.php

    결과적으로 "Hello, World!" 텍스트가 있는 웹 페이지가 표시됩니다.

6.2.2. nginx 웹 서버에서 PHP 사용

nginx 웹 서버를 통해 PHP 코드를 실행할 수 있습니다.

사전 요구 사항

  • PHP 스크립팅 언어가 시스템에 설치되어 있습니다.

절차

  1. nginx 패키지를 설치합니다.

    # dnf install nginx
  2. nginx 서버를 시작합니다.

    # systemctl start nginx

    또는 nginx 서버가 시스템에서 이미 실행 중인 경우 PHP를 설치한 후 nginx 서비스를 다시 시작합니다.

    # systemctl restart nginx
  3. php-fpm 서비스를 시작합니다.

    # systemctl start php-fpm
  4. 선택 사항: 두 서비스 모두 부팅 시 시작되도록 활성화합니다.

    # systemctl enable php-fpm nginx
  5. PHP 설정에 대한 정보를 얻으려면 /usr/share/nginx/html/ 디렉터리에 다음 콘텐츠를 사용하여 index.php 파일을 만듭니다.

    # echo '<?php phpinfo(); ?>' > /usr/share/nginx/html/index.php
  6. index.php 파일을 실행하려면 브라우저가 다음을 가리키도록 합니다.

    http://<hostname>/
  7. 선택 사항: 특정 요구 사항이 있는 경우 구성을 조정합니다.

    • /etc/nginx/nginx.conf - nginx 기본 구성
    • /etc/nginx/conf.d/php-fpm.conf - nginx에 대한 FPM 구성
    • /etc/php-fpm.conf - FPM 메인 구성
    • /etc/php-fpm.d/www.conf - 기본 WWW 풀 구성

예 6.2. "Hello, World!"를 실행합니다. nginx 서버를 사용하는 PHP 스크립트

  1. /usr/share/nginx/html/ 디렉터리에 프로젝트의 hello 디렉터리를 만듭니다.

    # mkdir hello
  2. 다음 콘텐츠를 사용하여 /usr/share/nginx/html/hello/ 디렉터리에 hello.php 파일을 만듭니다.

    # <!DOCTYPE html>
    <html>
    <head>
    <title>Hello, World! Page</title>
    </head>
    <body>
    <?php
        echo 'Hello, World!';
    ?>
    </body>
    </html>
  3. nginx 서버를 시작합니다.

    # systemctl start nginx
  4. hello.php 파일을 실행하려면 브라우저가 다음을 가리키도록 합니다.

    http://<hostname>/hello/hello.php

    결과적으로 "Hello, World!" 텍스트가 있는 웹 페이지가 표시됩니다.

추가 리소스

6.3. 명령줄 인터페이스를 사용하여 PHP 스크립트 실행

PHP 스크립트는 일반적으로 웹 서버를 사용하여 실행되지만 명령줄 인터페이스를 사용하여 실행할 수도 있습니다.

사전 요구 사항

  • PHP 스크립팅 언어가 시스템에 설치되어 있습니다.

절차

  1. 텍스트 편집기에서 파일 이름 . php 파일 생성

    파일 이름을 파일 이름으로 바꿉니다.

  2. 명령줄에서 생성된 파일 이름.php 파일을 실행합니다.

    # php filename.php

예 6.3. "Hello, World!"를 실행합니다. 명령줄 인터페이스를 사용한 PHP 스크립트

  1. 텍스트 편집기를 사용하여 다음 내용으로 hello.php 파일을 생성합니다.

    <?php
        echo 'Hello, World!';
    ?>
  2. 명령줄에서 hello.php 파일을 실행합니다.

    # php hello.php

    결과적으로 "Hello, World!"가 출력됩니다.

6.4. 추가 리소스

  • httpd(8) - 명령줄 옵션의 전체 목록을 포함하는 httpd 서비스의 도움말 페이지입니다.
  • httpd.conf(5) - httpd 구성의 도움말 페이지로, httpd 구성 파일의 구조와 위치를 설명합니다.
  • nginx(8) - 명령줄 옵션의 전체 목록 및 신호 목록이 포함된 nginx 웹 서버의 도움말 페이지.
  • PHP-fpm(8) - PHP FPM의 설명서 페이지에서 명령줄 옵션 및 구성 파일의 전체 목록을 설명합니다.

법적 공지

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.