테크 튜토리얼 & 팁

라즈베리 파이 Python 가상 환경에서 pip 패키지 설치하기

해시우드 2024. 5. 1. 23:54
반응형

파이썬 개발 과정에서 가상 환경의 도입은 필수적인 변화가 되었습니다. 이전에는 시스템 전체에 직접 "pip install 패키지명"과 같은 명령을 사용하여 파이썬 라이브러리를 설치할 수 있었으나, 이 방법은 여러 가지 문제를 야기했습니다. 시스템에 설치된 파이썬 패키지들이 운영 체제의 패키지와 충돌하거나, 다양한 프로젝트에서 서로 다른 버전의 동일 패키지를 요구할 때 문제가 발생하는 경우가 많았습니다. 이러한 문제들을 해결하기 위해 파이썬 커뮤니티는 각 프로젝트에 독립적인 개발 환경을 제공하는 '가상 환경'을 널리 채택하게 되었습니다. 

 

가상 환경은 각각의 프로젝트에 필요한 패키지를 격리하여 설치할 수 있게 함으로써, 여러 프로젝트 간의 의존성 충돌을 방지하고, 운영 체제 수준에서의 충돌 가능성을 최소화합니다. 또한, 가상 환경은 개발자가 특정 프로젝트에 필요한 패키지와 그 정확한 버전을 관리하기 쉽게 해 줍니다. 이는 프로젝트의 이식성과 재현성을 향상시켜, 다른 시스템에서도 동일한 개발 환경을 쉽게 구축할 수 있도록 돕습니다. 

 

라즈베리 파이와 같은 임베디드 시스템에서는 시스템 자원이 제한적이기 때문에, 가상 환경을 사용하는 것은 더욱 중요합니다. 이를 통해 필요 없는 패키지가 시스템 전체에 설치되어 자원을 낭비하는 일을 방지하고, 각 프로젝트에 최적화된 환경을 구성할 수 있습니다. 본 포스팅에서는 라즈베리 파이에서 Python 가상 환경을 설정하고, 필요한 패키지를 안전하고 효율적으로 관리하는 방법을 단계별로 설명하겠습니다.

 

Installing pip packages in the Raspberry Pi Python virtual environment

 

1. Python 가상 환경에 대하여

이전 버전의 운영 체제에서는 파이썬용 패키지 설치 프로그램(일반적으로 pip라고 함)을 사용하여 시스템 전체에 직접 라이브러리를 설치할 수 있었습니다. 온라인의 많은 튜토리얼에서 다음과 같은 종류의 명령을 찾을 수 있습니다.

$ pip install 패키지명

 

최신 버전의 라즈베리파이 OS 및 기타 운영 체제에서는 이 방법이 허용되지 않습니다. 시스템 전체에 파이썬 패키지를 설치하려고 하면 이와 유사한 오류가 발생합니다.

$ pip install 패키지명
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
  python3-xyz, where xyz is the package you are trying to
  install.

  If you wish to install a non-Debian-packaged Python package,
  create a virtual environment using python3 -m venv path/to/venv.
  Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
  sure you have python3-full installed.

  For more information visit http://rptl.io/venv

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

 

 

이 오류는 타사 패키지를 시스템 Python에 설치하려고 할 때 발생합니다. Python 사용자들의 오랜 실질적인 문제는 apt와 같은 OS 패키지 관리자와 pip와 같은 Python 전용 패키지 관리 도구 간의 충돌이었습니다. 이러한 충돌에는 파이썬 수준의 API 비호환성과 파일 소유권에 대한 충돌이 모두 포함됩니다.

 

따라서 Bookworm 이후부터는 pip를 통해 설치된 패키지는 venv를 사용하여 Python 가상 환경에 설치해야 합니다. 가상 환경은 서드파티 모듈을 안전하게 설치할 수 있는 컨테이너로, 시스템 Python을 방해하거나 손상시키지 않습니다.

 

2. 가상 환경에서 pip 사용

가상 환경을 사용하려면 환경을 저장할 컨테이너를 만들어야 합니다. Python으로 작업하는 방식에 따라 여러 가지 방법으로 이 작업을 수행할 수 있습니다.

 

각 프로젝트에 별도의 환경 사용

진행할 수 있는 한 가지 방법은 만드는 각 Python 프로젝트마다 새로운 가상 환경을 만드는 것입니다. 여기에서는 가상 환경 디렉터리와 함께 자신의 코드를 저장할 디렉터리를 만듭니다.

$ mkdir my_project
$ cd my_project
$ python -m venv env

 

이제 my_project 디렉터리 내부를 살펴보면 env라는 디렉터리가 있습니다.

 

$ ls -la
total 12
drwxr-xr-x  3 pi pi 4096 Oct  3 14:34 .
drwx------ 20 pi pi 4096 Oct  3 14:34 ..
drwxr-xr-x  5 pi pi 4096 Oct  3 14:34 env
$

 

※ 시스템 Python에서 현재 설치된 패키지를 상속하려면 python -m venv --system-site-packages env를 사용하여 가상 환경을 만들어야 합니다.

 

이 디렉토리 안에는 전체 Python 배포판이 있습니다. 가상 환경을 활성화하고 해당 버전의 Python을 현재 사용 중인 버전으로 설정하려면 다음과 같이 입력해야 합니다.

$ source env/bin/activate
(env) $

 

이제 프롬프트 앞에 더 이상 시스템 Python을 사용하지 않음을 나타내는 (env)가 추가되는 것을 볼 수 있습니다. 대신 가상 환경 내에 포함된 Python 버전을 사용하게 됩니다. 여기서 변경한 사항은 시스템 Python에 문제를 일으키지 않으며 환경에 새로 설치하는 모듈도 마찬가지입니다.

 

(env) $ which python
/home/pi/my_project/env/bin/python

 

타사 패키지를 설치하는 경우 가상 환경의 Python 배포에 설치됩니다.

 

(env) $ pip install buildhat
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting buildhat
  Downloading https://www.piwheels.org/simple/buildhat/buildhat-0.5.12-py3-none-any.whl (57 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 57.8/57.8 kB 2.8 MB/s eta 0:00:00
Collecting gpiozero
  Downloading https://www.piwheels.org/simple/gpiozero/gpiozero-2.0-py3-none-any.whl (150 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 150.5/150.5 kB 6.9 MB/s eta 0:00:00
Collecting pyserial
  Downloading https://www.piwheels.org/simple/pyserial/pyserial-3.5-py2.py3-none-any.whl (90 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 kB 7.5 MB/s eta 0:00:00
Collecting colorzero
  Downloading https://www.piwheels.org/simple/colorzero/colorzero-2.0-py2.py3-none-any.whl (26 kB)
Requirement already satisfied: setuptools in ./env/lib/python3.11/site-packages (from colorzero->gpiozero->buildhat) (66.1.1)
Installing collected packages: pyserial, colorzero, gpiozero, buildhat
Successfully installed buildhat-0.5.12 colorzero-2.0 gpiozero-2.0 pyserial-3.5
(env) $

 

이제 pip list 명령을 통해 현재 버전의 파이썬에 새 모듈이 포함되어 있는 것을 확인할 수 있습니다.

 

(env) $ pip list
Package    Version
---------- -------
buildhat   0.5.12
colorzero  2.0
gpiozero   2.0
pip        23.0.1
pyserial   3.5
setuptools 66.1.1

 

코드를 작성한 후에는 평소와 같이 가상 환경의 명령줄에서 Python을 호출하여 실행할 수 있습니다.

 

(env) $ deactivate
$

 

이후 pip list 명령을 사용하여 설치된 패키지를 확인하여 직접 시연해 보세요.

 

3. 각 사용자에 대해 별도의 환경 사용

각 Python 프로젝트에 대해 가상 환경을 만드는 다른 방법은 사용자 계정에 대해 하나의 가상 환경을 만든 다음 Python 코드를 실행하기 전에 해당 환경을 활성화하는 것입니다. 이 방법은 일반적으로 각 프로젝트에 동일한 모듈 세트를 설치하고 각 프로젝트에 대해 개별 Python 환경을 만들지 않으려는 경우, 즉 환경을 복제하는 데만 신경 쓰고 싶지 않은 경우에 선호될 수 있습니다.

$ python -m venv ~/.env
$ source ~/.env/bin/activate
(.env) $

 

pip list 명령을 사용하여 별도의 환경에 있는지 다시 확인할 수 있습니다.

 

(.env) $ pip list
Package    Version
---------- -------
pip        23.0.1
setuptools 66.1.1

 

이후 deactivate 명령을 사용하여 원위치로 돌아옵니다.

 

(.env) $ deactivate
$

 

 

참고문헌

Raspberry Pi Documentation, https://www.raspberrypi.com/documentation/computers/os.html#python-on-raspberry-pi

반응형