1 의존성 관련 문제
1.1 SolverProblemError: 의존성 충돌
가장 흔한 오류. 패키지 간 버전 요구사항이 충돌할 때 발생한다.
SolverProblemError
Because package-a (1.0.0) depends on numpy (>=1.24,<2.0)
and package-b (2.0.0) depends on numpy (>=2.0,<3.0),
package-a (1.0.0) is incompatible with package-b (2.0.0).
해결 방법:
1.2 poetry add가 오래 걸림
의존성 해결(resolution)에 시간이 걸리는 경우.
1.3 poetry.lock과 pyproject.toml 불일치
Warning: poetry.lock is not consistent with pyproject.toml.
You may be getting improper dependencies.
Run `poetry lock [--no-update]` to fix it.
원인: pyproject.toml을 직접 수정했지만 poetry lock을 실행하지 않은 경우.
2 가상환경 관련 문제
2.1 가상환경을 찾을 수 없음
The currently activated Python version X.X is not supported
by the project (~3.11).
2.2 .venv가 프로젝트 밖에 생성됨
2.3 이미 활성화된 가상환경과 충돌
Conda 환경이 활성화된 상태에서 Poetry를 사용하면 문제가 생길 수 있다.
3 설치 관련 문제
3.1 pip 호환 패키지인데 설치 실패
Unable to find installation candidates for package-name
3.2 빌드 의존성 누락 (C 확장 패키지)
error: Microsoft Visual C++ 14.0 or greater is required
# 또는
error: command 'gcc' failed
C 확장을 포함한 패키지(numpy, pandas 등)의 빌드 실패.
해결 방법:
3.3 Hash mismatch 에러
Hash mismatch for package-name
4 Lock 파일 관련 문제
4.1 poetry lock이 실패
4.2 팀원 간 Lock 파일 충돌 (Git merge conflict)
# lock 파일의 merge conflict 해결
# → 수동 편집 금지! lock 파일은 자동 생성해야 함
# 1. pyproject.toml의 충돌만 수동 해결
# 2. lock 파일 재생성
git checkout --theirs poetry.lock # 또는 --ours
poetry lock --no-update
git add poetry.lock
git commit
중요
poetry.lock은 절대 수동으로 편집하면 안 된다. 항상 poetry lock 명령으로 재생성해야 한다.
5 빌드/배포 관련 문제
5.1 poetry build 실패
5.2 poetry publish 인증 실패
HTTP Error 403: Invalid or non-existent authentication information
5.3 버전 중복 (이미 배포된 버전)
HTTP Error 400: File already exists
PyPI는 같은 버전을 다시 업로드할 수 없다.
6 성능 관련 문제
6.1 poetry install이 느림
6.2 Python 버전 해결이 느림
7 디버깅 팁
7.1 상세 로그 출력
7.2 환경 정보 수집
문제를 보고하거나 도움을 요청할 때 필요한 정보:
7.3 깨끗한 상태에서 재시작
모든 방법이 실패했을 때:
8 자주 묻는 질문
8.1 poetry.lock을 .gitignore에 넣어야 하나?
아니요. 반드시 Git에 커밋해야 한다. Lock 파일이 없으면 팀원마다 다른 버전이 설치될 수 있다.
- 애플리케이션 (웹 서버, CLI 등):
poetry.lock커밋 (필수) - 라이브러리 (PyPI 배포):
poetry.lock커밋 (권장, 개발 환경 재현용)
8.2 poetry add vs pyproject.toml 직접 수정?
가능하면 poetry add를 사용하는 것이 좋다. 직접 수정하면 poetry lock을 따로 실행해야 한다.
8.3 Poetry 1.x와 2.x의 차이?
| 항목 | Poetry 1.x | Poetry 2.x |
|---|---|---|
| 메타데이터 위치 | [tool.poetry] |
[project] (PEP 621) |
| 의존성 위치 | [tool.poetry.dependencies] |
[project.dependencies] |
| poetry-core 버전 | >=1.0.0 |
>=2.0.0 |
| 하위 호환성 | - | 1.x 형식도 지원 |
경고
Poetry 2.x에서 [project]와 [tool.poetry]를 혼용할 때, 의존성은 [project.dependencies]에 넣어야 poetry.lock에 반영된다.
9 요약
| 문제 유형 | 첫 번째 시도 | 최후의 수단 |
|---|---|---|
| 의존성 충돌 | poetry show --tree로 원인 파악 |
버전 제약 완화 |
| 가상환경 문제 | poetry env use python3.x |
poetry env remove --all + 재설치 |
| Lock 파일 오류 | poetry lock --no-update |
rm poetry.lock && poetry lock |
| 설치 실패 | poetry install -vvv로 로그 확인 |
캐시 삭제 후 재시도 |
| 빌드 실패 | poetry check |
pyproject.toml 필드 점검 |
| 인증 실패 | 토큰 재설정 | 환경변수로 설정 |