python-poetry

2022. 4. 22. 16:18AI/Big data

    목차
반응형

About poetry

Python project의 의존 관리 기능

 

system requirements

  • Python 3.7+
  • multi-platform: Windows, Linux, OSX

installation

pip install --user poetry

 

pyproject.toml

pyproject.toml file 하나로 모든 Python의 package들을 관리

이 파일로 setup.py, requirements.txt, setup.cfg, MANIFEST.in, Pipfile 들을 대체할 수 있음

 

[tool.poetry]
name = "my-pakcage"
version = "0.1.0"
description = "my package"

license = "MIT"

authors = [
    "R"
]

readme = "README.md"

repository = "https://github.com/my-package"
homepage = "https://github.com/my-package"

keywords = ["package", "my-package"]


[tool.poetry.dependencies]
python = "~2.7 || ^3.2"
toml = "^0.9"

requests = {version = "^2.13", extras = ["security"]}

pathlib2 = {version = "^2.2", python = "~2.7", allow-prereleases = true}

cleo = {git = "https://github.com/sdispater/cleo.git", branch = "master"}

pendulum = {version = "^1.4", optional = true}


[tool.poetry.dev-dependencies]
pytest = "^3.0"
pytest-cov = "^2.4"


[tool.poetry.scripts]
my-script = "my_package:main"

 

별도의 readme file을 둘 수 있음

keyword는 tag처럼 사용됨

dependencies 부분에서는 caret, tilde, wildcard, inequality와 multiple requirements를 지원

python version을 명시해야 함

 

하나의 file에 여러 설정들을 모두 집약하는 것을 만들고 싶었다고 함

Rust의 cargo등에 영감을 받았음

 

 

dependency resolution

 

pipenv install oslo.utils==1.4.0

위 경우 다음과 같이 에러가 날 수 있음

Could not find a version that matches pbr!=0.7,!=2.1.0,<1.0,>=0.6,>=2.0.0

Poetry는 

poetry add oslo.utils=1.4.0

 

  - Installing pytz (2018.3)
  - Installing netifaces (0.10.6)
  - Installing netaddr (0.7.19)
  - Installing oslo.i18n (2.1.0)
  - Installing iso8601 (0.1.12)
  - Installing six (1.11.0)
  - Installing babel (2.5.3)
  - Installing pbr (0.11.1)
  - Installing oslo.utils (1.4.0)

효과적으로 dependency를 해결

(매우 효과적으로 지원)

 

oslo.utils (1.4.0) depends on:

  • pbr (>=0.6,!=0.7,<1.0)
  • Babel (>=1.3)
  • six (>=1.9.0)
  • iso8601 (>=0.1.9)
  • oslo.i18n (>=1.3.0)
  • netaddr (>=0.7.12)
  • netifaces (>=0.10.4)

 

사용법

poetry new my-prject

 

다음의 file들이 생성됨

my-project tree
.
├── README.rst
├── my_project
│   └── __init__.py
├── pyproject.toml
└── tests
    ├── __init__.py
    └── test_my_project.py

 

pyproject.toml file이 의존성 관리 file

[tool.poetry]
name = "my-project"
version = "0.1.0"
description = ""
authors = ["R"]

[tool.poetry.dependencies]
python = "^3.8"

[tool.poetry.dev-dependencies]
pytest = "^5.2"

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

 

의존성 부분에 package 추가

poetry add django

 

[tool.poetry.dependencies]에 

Django = "^4.0.4"가 추가됨

 

 

^(캐럿)의 의미

^1.2.3 >=1.2.3 <2.0.0
^1.2 >=1.2.0 <2.0.0
^1 >=1.0.0 <2.0.0
^0.2.3 >=0.2.3 <0.3.0
^0.0.3 >=0.0.3 <0.0.4
^0.0 >=0.0.0 <0.1.0
^0 >=0.0.0 <1.0.0

 

의존성 update

poetry update

 

 

packaging

poetry build

 

이를 수행하면, 다음과 같이 파일들이 생성됨

 

├── dist
│   ├── my-project-0.1.0.tar.gz
│   └── my_project-0.1.0-py3-none-any.whl

 

 

명령어

명령어 설명
poetry new prj prj 생성

poetry init
pyproject.toml을 대화형으로 생성
poetry install pyproject.toml file을 보고 의존성 package들을 설치

poetry install --no-dev  # 개발 환경 의존성을 제외하고 설치

poetry install --extra "mysql redis"  # 추가 의존성 설치를 지정
poetry update 의존성 update
poetry.lock file을 update
poetry build packaging
poetry add package_name package 의존성을 추가
poetry remove flask package 의존성을 제거
poetry show 모든 설치된 의존성을 보여줌

poetry show --no-dev  # 개발환경을 제외한 의존성을 보여줌

poetry show flask    # 특정 package의 상세 내용을 보여줌
poetry show --outdate
poetry show --tree
poetry publish PyPI에 배포
poetry config --list 설정 보기
poetry run python -V virtualenv에 command를 전달하여 실행
poetry search beautiful package를 search
poetry env use 경로 가상 환경 관리
poetry env list 가상환경 list-up
poetry env remove 경로 삭제
poetry env info 정보 확인

 

 

 

 

 

반응형

'AI > Big data' 카테고리의 다른 글

빅데이터 에코 시스템  (0) 2022.04.29
isort  (0) 2022.04.22
surprise knns.KNNWithMeans  (0) 2022.03.26
Anaconda 사용법  (0) 2022.03.26
Matrix Factorization impl 2  (0) 2022.03.25