티스토리 뷰
문제 상황
mise로 Python을 관리하는 환경에서 Poetry 공식 문서의 설치 명령어를 실행했을 때 발생한 문제다.
curl -sSL https://install.python-poetry.org | python3 -
설치 중 다음과 같은 에러가 발생했다.
Retrieving Poetry metadata
# Welcome to Poetry!
Installing Poetry (2.2.1): An error occurred. Removing partial environment.
Poetry installation failed.
See /Users/sskim/poetry-installer-error-ql0xslj3.log for error logs.
에러 로그를 확인하면 다음과 같다.
dyld[39797]: Library not loaded: @executable_path/../lib/libpython3.11.dylib
Referenced from: <4C4C44F2-5555-3144-A16A-0D0861FD3F67> /Users/sskim/Library/Application Support/pypoetry/venv/bin/python3
Reason: tried: '/Users/sskim/Library/Application Support/pypoetry/venv/lib/libpython3.11.dylib' (no such file)
원인 분석
Python 동적 라이브러리
Python 인터프리터는 실행 시 동적 라이브러리를 필요로 한다. macOS에서는 .dylib, Linux에서는 .so 확장자를 가진 이 라이브러리가 Python의 핵심 기능을 제공한다.
mise의 Python 설치 구조
mise는 다음과 같은 경로에 Python을 설치한다.
~/.local/share/mise/installs/python/3.11.12/
이 구조는 버전별로 독립적인 디렉토리를 가지며, 사용자 홈 디렉토리 하위에 위치한다.
Poetry 설치 스크립트의 동작 방식
Poetry 공식 설치 스크립트는 다음 순서로 동작한다.
- 시스템 Python으로 가상환경 생성
- 기본값인
symlinks=False옵션 사용 - Python 바이너리를 가상환경으로 복사
- Poetry 설치
문제의 핵심
복사된 Python 바이너리는 @executable_path/../lib/libpython3.11.dylib와 같은 상대 경로를 포함한다. 이 경로는 원본 Python 설치 위치를 기준으로 계산되는데, 복사된 바이너리가 새로운 위치에서 실행되면 경로 불일치가 발생한다.
mise의 동적 경로 구조에서는 이 라이브러리를 찾을 수 없기 때문에 에러가 발생하는 것이다.
Homebrew나 시스템 Python에서는 왜 문제가 없을까
Homebrew Python:
/opt/homebrew/...와 같은 고정된 경로에 설치- 시스템 전역 라이브러리 경로 사용
- 바이너리 복사 시에도 경로 일관성 유지
시스템 Python:
- 절대 경로가 변경되지 않음
- 시스템 라이브러리 검색 경로에 포함
mise Python:
- 사용자 홈 디렉토리의 동적 경로
- 버전별로 독립된 경로 구조
- 복사 시 상대 경로 참조 불가능
이처럼 mise는 구조적으로 바이너리 복사 방식과 호환성 문제가 있다.
해결 방법
1. symlinks=True 옵션으로 설치 (권장)
가장 간단하고 확실한 방법이다.
curl -sSL https://install.python-poetry.org | sed 's/symlinks=False/symlinks=True/' | python3 -
이 방법은 Python 바이너리를 복사하는 대신 심볼릭 링크를 생성한다. 심볼릭 링크는 원본 파일을 직접 가리키므로 원본 Python의 라이브러리 경로를 그대로 사용할 수 있다.
장점:
- mise Python 환경에서 완벽하게 작동
- Python 버전 업데이트 시에도 안정적
- 추가 설정 불필요
2. pipx 사용
pipx는 Python 애플리케이션을 격리된 환경에서 실행하는 도구다.
# pipx 설치
python3 -m pip install --user pipx
python3 -m pipx ensurepath
# Poetry 설치
pipx install poetry
pipx는 라이브러리 경로 문제를 더 잘 처리하며, 여러 Python 도구를 독립적으로 관리할 수 있다. 다만 Poetry 공식 설치 방법은 아니며 추가 도구 설치가 필요하다.
검증
설치 후 다음 명령어로 확인한다.
poetry --version
정상적으로 설치되었다면 다음과 같이 출력된다.
Poetry (version 2.2.1)
관련 이슈
이 문제는 mise뿐만 아니라 다음 환경에서도 발생할 수 있다.
- pyenv: 비슷한 버전 관리 방식을 사용
- asdf: 다양한 런타임 버전 관리 도구
- 사용자 정의 Python 빌드: 비표준 경로에 설치된 경우
정리
mise와 같은 동적 경로 기반 버전 관리 도구를 사용할 때는 다음을 기억하자.
- symlinks=True 옵션을 사용한 설치가 가장 안정적이다
- pipx와 같은 전용 도구를 활용하는 것도 좋은 대안이다
- Python 바이너리 복사 대신 심볼릭 링크 사용이 핵심이다
이 방법으로 mise 환경에서도 Poetry를 문제없이 사용할 수 있다.
참고
- Total
- Today
- Yesterday
- claude
- k8s
- Mac
- springboot
- jQuery
- rocky
- repomix
- Kotlin
- Spring
- maven
- Bash tab
- svn
- Java
- intellij
- mybatis config
- config-location
- LocalDate
- oracle
- 북리뷰
- Spring Security
- JavaScript
- window
- localtime
- docker
- mybatis
- 오라클
- input
- Linux
- LocalDateTime
- elasticsearch
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |