
<서론>
IDA MIPS ROP 플러그인을 설치하려고 관련 파일을 IDA 디렉토리에 넣는데 다음과 같은 오류가 발생했고 따라서 파이썬의 파일 경로를 다시 설정해주는 방식으로 해결을 시도했다.
WARNING: Python 3 is not configured (Python3TargetDLL value is not set). Please run idapyswitch to select a Python 3 install.
그런데 경로를 재설정하고 IDA를 다시 시작했을 때 imp 모듈이 없다는 오류가 발생했다.
imp 모듈의 경우 python 3.11 버전에서 사용하기 때문에 현재 내가 사용중인 3.12 버전의 경우 importlib을 설치해야한다는 것을 알게되었고 따라서 파이썬 버전을 조정하는 해결 방법을 알아보며 pyenv에 대해서 글을 작성하게 되었다.
<Pyenv>
기본적으로 운영 체제에는 하나의 python 버전만 설치되는데 프로젝트를 하다보면 각각 다른 버전의 python이 필요한 경우가 생긴다. 이러한 경우에 pyenv를 사용하면 여러개의 python 버전을 설치하고 관리할 수 있다.
1. pyenv 설치 방법
window
- Scoop 사용
scoop install pyenv-win
- Chocolate 사용
choco install pyenv-win
- pyenv 공식 페이지 방법
다음 명령어를 powershell에 입력해서 설치하는 방법이 있다.
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"
만약 안되는 경우 다음과 같이 powershell의 권한을 조정한 후 명령어를 입력한다.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
설치를 마친다음 powershell을 재시작하고 pyenv를 입력해서 설치가 잘 되었는지 확인하면 끝이다.
그외에는 직접 Github에서 pyenv-win을 다운받아서 환경변수 PATH를 설정하는 방법이 있다.
Linux
bash에 다음 명령어 입력
curl https://pyenv.run | bash
2. pyenv의 기능
pyenv의 기능은 다음과 같이 python 버전 관리, 가상환경 지원, python 버전 자동 전환등을 지원한다.
3. pyenv 명령어
이 경우 pyenv는 여러 버전의 python을 설치하고 프로젝트별로 필요한 버전을 선택해서 사용할 수 있도록 한다.
pyenv global 명령어는 시스템 전체에서 기본으로 사용할 Python 버전을 설정함
pyenv global <버전>
pyenv local 명령어는 특정 디렉토리(프로젝트)에서만 적용되는 Python 버전을 설정함
pyenv local <버전>
→ 이 경우 위 명령어를 원하는 디렉안으로 이동해서 작성하면 해당 디렉토리에서의 python 버전이 결정됨
pyenv shell 명령어는 현재 세션(터미널 창)에서만 일시적으로 Python 버전을 변경함
pyenv shell <버전>
→ 특정 명령을 실행할 때만 특정 버전을 사용하고 싶을 때 사용하면 됨
각 명령어의 특징을 비교해서 정리하면 다음과 같다.
| 명령어 | 적용 범위 | 지속성 | 사용 사례 |
| pyenv global | 시스템 전체 | 영구적 | 기본 Python 버전 설정 |
| pyenv local | 특정 디렉토리 (프로젝트) | .python-version 파일로 유지 | 프로젝트별 Python 버전 관리 |
| pyenv shell | 현재 터미널 세션 | 일시적 | 특정 작업을 위한 일회성 설정 |
다음은 pyenv에 대한 추가적인 내용이다.
4. pyenv-virtualenv 플러그인을 이용한 가상 환경 관리
pyenv를 사용하면 pyenv-virtualenv 플러그인을 사용해서 가상환경 관리를 할 수 있다.
pyenv-virtualenv는 Pyenv의 확장 플러그인으로 프로젝트마다 다른 Python 버전과 패키지를 독립적으로 관리할 수 있도록 하고 특정 프로그램에 진입할 때 자동으로 해당 가상환경이 활성화할 수 있도록 도와준다.
기존 python 내장 가상환경인 venv와의 차이점을 표로 정리하면 다음과 같다.
| 기능 비교 | venv (Python 기본 가상환경) | pyenv-virtualenv |
| Python 버전 선택 | 현재 Python 버전에서만 가능 | 여러 Python 버전에서 가상환경 생성 가능 |
| 자동 활성화 | 직접 source 명령어 입력 필요 | 프로젝트 폴더 이동 시 자동 활성화 |
| 가상환경 관리 | 프로젝트 폴더마다 따로 생성해야 함 | pyenv 내에서 통합 관리 가능 |
| 삭제 및 정리 | 직접 폴더 삭제 필요 | pyenv virtualenvs로 쉽게 관리 |
설치방법
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
5. python-version 파일
위에 먼저 말했던 pyenv 명령어의 기능을 수행하는 내용을 내부적으로 살펴보면 local 명령어로 프로젝트의 특정 python 버전을 설정한 경우에 내부에서 생성되는 .python-version 파일을 통해 특정 디렉토리(프로젝트)에서 자동으로 특정 Python 버전 또는 가상환경이 활성화된다.
(pyenv는 특정 디렉토리에 .python-version 파일이 존재하면 해당 디렉토리에서 Python을 실행할 때 자동으로 그에 맞는 버전 또는 가상환경을 활성화함)
.python-version 파일에는 사용할 Python 버전 또는 가상환경 이름이 저장된다.
local 명령어와 관련된 내용을 담은 파일이기 때문에 특정 디렉토리내의 python-version 파일을 제거할 경우 해당 디렉토리는 다시 전역(global) python 버전의 설정을 따르게 된다.
참고
- https://github.com/pyenv-win/pyenv-win/blob/master/docs/installation.md
- https://velog.io/@euisuk-chung/Goodbye-Conda-Hello-PyENV
- https://blog.flynnpark.dev/7
'이하임' 카테고리의 다른 글
| Fuzzer 조사 - Fuzzing과 Fuzzer에 대한 이해 (0) | 2025.04.27 |
|---|---|
| CPIO 아카이브 파일 (0) | 2025.02.19 |
| ASLR에 대해서 (0) | 2025.02.12 |
| .ubi에서 파일 시스템 추출 (0) | 2024.11.12 |

stellarflare 님의 블로그 입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!