오도원입니다.

건강과 행복을 위하여

Development/Python

Python. poetry with requirements.txt

오도원공육사 2024. 1. 18. 10:06
반응형
 

requirements.txt

requirements.txt는 파이썬 프로젝트에서 사용하는 외부 라이브러리와
해당 라이브러리의 버전 정보를 명시적으로 작성하는 파일입니다.

JS의 package.json과 같은 녀석

예시

numpy==1.20.2
pandas==1.2.3
matplotlib==3.4.0

사용 방법

pip으로 패키지들을 설치하고 나서

pip freeze > requirements.txt 를 사용하면 작성이 된다.

JS에서 모듈 설치하면 자동으로 명시가 되는데 이걸 수동으로한다.
심지어 txt 확장자다. 역하다

레포지토리 구성할 때 pip install -r requirements.txt로 설치

poetry

pip install을 통해 의존성을 설치했지만
패키지 관리가 수동이라니.. 너무 불편하다

poetry라고 Node의 npm과 같은 패키지 매니저이다.
사용방법도 비슷하다.
해당 툴을 사용해서 패키지들을 설치를하면 lock 파일에 의존성을 관리해준다.

  • poetry init
  • poetry add 모듈이름
  • poetry install

마이그레이션

기존 requirements.txt에서 poetry toml파일로 이전을 했다.

cat requirements.txt | xargs poetry add

에러 1

wsl을 사용하여 위 명령어를 사용하니
자꾸 WARNING: a NUL character occurred in the input.

윈도우 환경인데 txt 파일이 CRLF이고 UTF-16으로 인코딩 되어있었다.

LF, UTF-8로 수정

에러 2

The current project's Python requirement (>=3.10,<4.0) is not compatible with some of the required packages Python requirement:
  - scipy requires Python <3.12,>=3.8, so it will not be satisfied for Python >=3.12,<4.0

Because u2net-test depends on scipy (1.10.1) which requires Python <3.12,>=3.8, version solving failed.

  • Check your dependencies Python requirement: The Python requirement can be specified via the `python` or `markers` properties

    For scipy, a possible solution would be to set the `python` property to ">=3.10,<3.12"

이전 중인 패키지 중 호환성 문제 때문에 발생 한 것이다.
버전 범위를 명시해주자.

[tool.poetry.dependencies]
python = ">=3.8,<3.12"

설치

이전이 완료되었으면 poetry install을 사용하면 된다.

poetry install 명령어는 프로젝트에 대한 의존성을 설치하는 것이지만, 의존성을 프로젝트의 루트 디렉토리에 직접 설치하지는 않는다.
대신 Poetry는 가상 환경을 생성하여 프로젝트 의존성을 격리된 환경에 설치합니다.

이 가상 환경은 기본적으로 시스템 전역 가상 환경 디렉토리에 생성되며, 프로젝트 루트 디렉토리 외부에 위치합니다. 가상 환경의 위치는 설정에 따라 달라질 수 있습니다.

가상 환경의 위치를 확인하려면 다음 명령어를 실행:
poetry env info --path

이 명령어는 현재 프로젝트의 가상 환경 경로를 출력합니다.

프로젝트 루트 디렉토리에 가상 환경을 생성하려면 다음 명령어로 Poetry를 구성
poetry config virtualenvs.in-project true

이렇게 설정하면 프로젝트 루트 디렉토리에 .venv라는 이름의 가상 환경 폴더가 생성됩니다. 이 설정은 전역적으로 적용되므로, 이후에 생성되는 모든 프로젝트에서 이 설정을 사용한다.

각 프로젝트에 대해 개별적으로 설정하려면 poetry.toml 파일에 다음 구성을 추가

[tool.poetry.virtualenvs]
in-project = true

이 구성을 사용하면 현재 프로젝트에만 적용되며, 다른 프로젝트에는 영향을 미치지 않는다.

반응형