반응형
pyenv
여러 버전의 Python을 사용하기 위해서 pyenv를 사용했습니다.
AWS Lightsail에서는 pyenv를 설치하기 위해서 사전에 설치해야 할 패키지가 있습니다.
먼저 설치해야 할 패키지
sudo yum install @development zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl11 openssl11-devel xz xz-devel libffi-devel findutils tk-devel -y
각 패키지가 필요한 이유
@development
이 패키지 그룹은 일반적인 개발 도구 및 라이브러리(예: gcc, make 등)를 포함하고 있습니다. Python을 소스에서 빌드하려면 이러한 도구가 필요합니다.zlib-devel
zlib 라이브러리는 데이터 압축 및 압축 해제에 사용되는 소프트웨어 라이브러리입니다. Python은 gzip 및 zipfile 등의 모듈에서 zlib를 사용합니다.bzip2
,bzip2-devel
bzip2는 또 다른 데이터 압축 알고리즘입니다. Python은 bz2 모듈에서 이를 사용합니다.readline-devel
readline 라이브러리는 사용자가 인터랙티브 쉘에서 텍스트 입력을 수정하고 관리할 수 있게 해주는 도구입니다. Python 인터프리터는 이 라이브러리를 사용하여 사용자 입력을 처리합니다.sqlite and sqlite-devel
SQLite는 파일 기반의 경량 데이터베이스 시스템입니다. Python은 sqlite3 모듈에서 이를 사용합니다.openssl11
,openssl11-devel
OpenSSL은 보안 연결을 위한 암호화 라이브러리입니다. Python은 ssl 모듈에서 이를 사용합니다.xz
,xz-devel
XZ는 파일 압축을 위한 도구입니다. Python은 lzma 모듈에서 이를 사용합니다.libffi-devel
libffi는 다양한 프로그래밍 언어 간에 호출을 수행하는 데 사용되는 포터블, 고수준 프로그래밍 인터페이스입니다. Python의 ctypes 모듈에서 사용됩니다.findutils
findutils 패키지에는 find와 xargs 등의 명령어가 포함되어 있습니다. 이 명령어들은 파일 시스템에서 파일을 검색하고, 파일에 대한 작업을 수행하는 데 사용됩니다. 이 패키지는 Python 빌드 프로세스 자체에서 필요로 하는 것일 수 있습니다.tk-devel
tkinter는 Python에서 GUI(Graphical User Interface) 애플리케이션을 만들기 위해 사용되는 표준 Python 인터페이스입니다. 이는 Tcl/Tk를 Python에 바인딩한 것입니다. Tcl(Tool Command Language)은 일반적인 프로그래밍 언어이며, Tk는 Tcl에서 사용하는 GUI 툴킷입니다.
pyenv 설치
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
source ~/.bash_profile
- GitHub 저장소에서 최신 버전의 소스코드를 다운로드하고 컴파일합니다.
- 설치가 완료되면, .bashrc 파일에 pyenv 초기화 명령을 추가합니다.
- 터미널 세션에서 변경사항을 적용합니다.
pyenv
의 주요 명령어가 궁금하다면 아래에 정리되어 있습니다.
사용 예시
제가 설치한 버전은 Python 3.10.7 버전입니다.
Python 3.10.7 버전 설치
pyenv install 3.10.7
설치된 버전 확인
pyenv versions
pyenv 버전 변경 후 확인
pyenv global 3.10.7
,pyenv versions
Python 버전 확인
python -V Python 3.10.7
pyenv 주요 명령어
pyenv install <version>
예를 들어, Python 3.8.0을 설치하려면 pyenv install 3.8.0을 입력합니다.pyenv versions
현재 설치된 모든 Python 버전의 목록을 보여줍니다.pyenv global <version>
예를 들어, Python 3.8.0을 사용하려면 pyenv global 3.8.0을 입력합니다.pyenv version
현재 활성화된 Python 버전을 보여줍니다.pyenv local <version>
현재 디렉토리에 대한 Python 버전을 설정합니다. 디렉토리별로 Python 버전을 다르게 설정할 수 있습니다.pyenv install --list
이 명령어는 설치 가능한 모든 Python 버전의 목록을 보여줍니다.pyenv uninstall <version>
특정 Python 버전을 제거합니다. 예를 들어, Python 3.8.0을 삭제하려면 pyenv uninstall 3.8.0을 입력합니다.
설치 시 발생한 오류 정리
import _ssl # if we can't import it, let the error propagate
ModuleNotFoundError: No module named '_ssl'
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?
Python 3.10.7 버전을 설치하려고 했는데 이 오류때문에 한참을 고생했습니다.
이 오류는 Python 설치 과정에서 OpenSSL 라이브러리를 찾지 못할 때 발생합니다. 이는 _ssl
모듈을 빌드할 때 OpenSSL이 필요하기 때문입니다.
첫 번째 시도 (실패)
이 방법은 OpenSSL 경로를 다시 한 번 확인하고, 환경 변수를 설정한 후 설치하는 방법입니다.
- OpenSSL 라이브러리 파일이 존재하는지 확인, OpenSSL 라이브러리는 올바르게 설치되어 있었습니다.
ls /usr/lib64/libssl.so ls /usr/include/openssl/ssl.h
- Python 설치 과정에서 이 파일들을 찾지 못하는 것일 수도 있으므로 환경 변수 설정 후 설치 시도
export LDFLAGS="-L/usr/lib64/" export CPPFLAGS="-I/usr/include/openssl/" pyenv install 3.10.7
결과는 같은 오류 발생하며 실패
두 번째 시도 (실패)
이 방법은 OpenSSL의 소스를 직접 다운로드하고 빌드하고 환경 변수 설정한 후 설치하는 방법입니다.
- 먼저, OpenSSL의 소스 코드를 다운로드 받습니다.
wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
- 다운로드 받은 tar.gz 파일을 압축 해제합니다.
tar xzvf openssl-1.1.1k.tar.gz
- 압축을 풀면 openssl-1.1.1k라는 디렉터리가 생성됩니다. 이 디렉터리로 이동해서 OpenSSL을 빌드합니다.
cd openssl-1.1.1k ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl make sudo make install
- 이제 OpenSSL이 /usr/local/openssl에 설치되었습니다. 이 경로를 환경 변수에 추가하면 Python 설치 과정에서 OpenSSL 라이브러리를 찾을 수 있게 됩니다.혹시 첫 번째 시도에 사용했었던 환경번수 경로가 남아있다면 그 경로는 지워야 합니다!
echo 'export LDFLAGS="-L/usr/local/openssl/lib"' >> ~/.bashrc echo 'export CPPFLAGS="-I/usr/local/openssl/include"' >> ~/.bashrc echo 'export PKG_CONFIG_PATH="/usr/local/openssl/lib/pkgconfig"' >> ~/.bashrc
- 3.10.7 버전 설치 시도
pyenv install 3.10.7
결과는 같은 오류 발생하며 실패
세 번째 시도 (성공)
이 방법은 OpenSSL의 버전을 변경한 후 설치하는 방법입니다.
- 우선
.bashrc
파일에 등록했던 환경변수를 제거합니다. - 기존에 설치된 openssl-devel을 제거합니다.
sudo yum remove openssl-devel
- openssl11, openssl11-devel 을 설치합니다.
sudo yum install openssl11 openssl11-devel -y
- 3.10.7 버전 설치 시도
pyenv install 3.10.7
- 파이썬 설치는 정상적으로 됐으나,
ModuleNotFoundError: No module named '_tkinter'
라는 새로운 오류 발생
해당 오류는 tk-devel 패키지 설치로 해결sudo yum install tk-devel
반응형
'Development > Environment' 카테고리의 다른 글
Nginx 환경 설정으로 원하는 자원(CSS,JS,이미지)만 캐싱하기 (0) | 2023.10.17 |
---|---|
메모리가 부족한 AWS Lightsail에서는 스왑 공간을 활용하자 (0) | 2023.08.02 |
AWS Lightsail에서 React 빌드&배포 시 멈추는 현상 (메모리 부족) (0) | 2023.07.07 |
Amazon Linux 서버에서 Selenium 사용하기 (0) | 2023.06.22 |
Nginx :: 이중화 과정에서 발생한 오류들 정리 (0) | 2022.12.05 |