파이썬 시

파이썬의 생태계는 traditioally pipvirtualenv과 같은 도구에 의존해왔습니다. 의존성 및 프로젝트 환경을 관리합니다. 이러한 도구들은 잘 작동했지만 종종 의존성 충돌, 수동 환경 관리 및 팀 간 불일치하는 프로젝트 설정으로 이어집니다.

파이썬 Poetry는 현대적이고 통합된 의존성 및 환경 관리 도구를 제공하여 이러한 도전과제를 해결합니다. 가상 환경부터 패키지 게시까지 모두 처리하면서도 지능적인 의존성 해결을 통해 재현 가능한 빌드를 보장합니다.

이 안내서는 Python 개발 워크플로우를 최적화하고 일반적인 종속성 문제를 피하는 데 Poetry를 사용하는 방법을 안내합니다.

Python Poetry vs. PIP

Python 생태계에서 Poetry와 pip는 서로 다른 목적으로 사용됩니다. pip은 주로 패키지 설치 도구이며, Poetry는 완전한 종속성 및 프로젝트 관리 도구입니다. 주요 차이점은 다음과 같습니다:

1. 종속성 해결

  • Pip: 간단하고 선형적인 종속성 해결 방법으로 충돌을 일으킬 수 있습니다.
  • 시: 설치 전 충돌을 방지하는 고급 종속성 해결기

2. 가상 환경 관리

  • Pip: 별도의 도구 (virtualenv, venv) 및 수동 활성화 필요
  • 시: 프로젝트 당 가상 환경을 자동으로 생성하고 관리

3. 프로젝트 구성

  • Pip: 종속성은 requirements.txt를 사용하며 프로젝트 메타데이터는 setup.py를 사용함
  • 시: 모든 구성 요구 사항을 위한 단일 pyproject.toml 파일

4. 잠금 파일

  • Pip: 내장된 잠금 파일 지원 없음
  • Poetry: 환경 간 재현 가능한 빌드를 위해 poetry.lock 생성

5. 패키지 게시

  • Pip: 게시를 위해 추가 도구(twine, setuptools) 필요
  • Poetry: 패키지 빌드 및 게시를 위한 내장 명령어

시 Poetry를 사용해야 하는 경우:

다음 경우에 Poetry를 선택하십시오:

  • 재현 가능한 환경이 필요한 팀 프로젝트를 수행할 때
  • PyPI에 출판될 패키지를 빌드할 때
  • 잠재적인 충돌이 있는 복잡한 종속성 트리를 관리할 때
  • 자동화된 가상 환경 관리가 필요할 때
  • 전체 개발 워크플로우에 대한 단일 도구가 필요할 때

Pip를 사용해야 하는 경우에는 계속해서 사용하십시오:

  • 최소한의 종속성을 가진 간단한 스크립트를 작업 중
  • 처음으로 Python을 배우는 중
  • 빠르게 단일 패키지를 설치해야 함
  • Poetry 설치가 불가능한 환경에서 작업 중
  • 이미 pip으로 설정된 레거시 프로젝트를 유지 중

일반적인 지침은 다음과 같습니다: 프로젝트를 공유하거나 장기적으로 유지보수할 프로젝트에는 Poetry를 사용하십시오. 빠른 실험이나 학습 용도로는 pip를 사용하십시오.

그렇다면, 이제 Poetry를 사용하는 방법에 대해 살펴보겠습니다.

Python Poetry 설정하기

주로 명령줄(CLI) 도구로 Poetry와 상호 작용하게 되므로 시스템 전역에 설치하는 것이 합리적입니다. 이 섹션에서는 이 중요한 첫 번째 단계를 다루며, 필요에 따라 Poetry의 기본 구성을 설정하는 방법을 안내합니다.

Poetry 설치하기

공식 설치 스크립트를 사용하여 Poetry를 설치할 수 있으며, 이는 단일 명령어로 다운로드하고 실행할 수 있습니다.

macOS, Linux 및 WSL2용:

$ curl -sSL https://install.python-poetry.org | sudo python3 -

Windows Powershell용(관리자 권한으로 실행):

$ (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -

만약 Windows를 사용하고 Microsoft Store에서 Python을 설치했다면 (어떤 이유에서든), 위 명령어에서 pypython으로 바꿔주십시오.

설치 스크립트가 완료되면 Poetry를 PATH에 추가하라는 메시지가 출력되어 poetry 명령어를 어디서든 사용할 수 있게 합니다.

macOS, Linux 및 WSL2의 경우, 다음 줄을 쉘 스크립트에 추가하십시오. .bashrc 또는 .zshrc에 다음 줄을 추가하십시오:

$ export PATH="/Users/bexgboost/.local/bin:$PATH"

Windows에서는 출력 지침을 따를 수 있습니다.

그 후에 설치를 확인하려면 다음을 실행하십시오 poetry --version.

포에트리 구성

대부분의 포에트리 구성은 가상 환경이 생성되는 방식 및 패키지가 설치되는 방식에 관한 것입니다. 다음 명령을 사용하여 (거의) 전체 포에트리 구성 목록을 인쇄할 수 있습니다:

$ poetry config --list

출력은 아래와 같이 보일 것입니다:

cache-dir = "/Users/bexgboost/Library/Caches/pypoetry" experimental.system-git-client = false installer.max-workers = null installer.modern-installation = true installer.no-binary = null installer.parallel = true keyring.enabled = true solver.lazy-wheel = true virtualenvs.create = true virtualenvs.in-project = null virtualenvs.options.always-copy = false virtualenvs.options.no-pip = false virtualenvs.options.no-setuptools = false virtualenvs.options.system-site-packages = false virtualenvs.path = "{cache-dir}/virtualenvs" # /Users/bexgboost/Library/Caches/pypoetry/virtualenvs virtualenvs.prefer-active-python = false virtualenvs.prompt = "{project_name}-py{python_version}" warnings.export = true

첫 번째 줄에서는 시인 캐시로 가는 경로를 볼 수 있습니다. 다운로드한 패키지 배포 및 가상 환경을 저장하는 데 주로 사용됩니다. 만약 이를 변경하고 싶다면 다음 명령을 실행할 수 있습니다:

$ poetry config virtualenvs.path path/to/new/virtualenv/dir

또 다른 중요한 구성은 설치 중 사용되는 코어의 수입니다. 기본적으로 4로 설정되어 있지만, 모든 CPU 코어를 활용하여 더 빠르게 만들 수 있습니다. 먼저 다음을 실행하여 기기의 코어 수를 확인하십시오os.cpu_count() Python 인터프리터에서. 그런 다음 출력을 설정하십시오:

$ poetry config installer.max-workers = 10

옵션 중 하나는 작업 디렉토리 또는 캐시에 가상 환경을 만들지 여부입니다. 이는 virtualenvs.in-project 옵션으로 제어됩니다. True로 설정하면 .venv 디렉토리가 항상 작업 디렉토리에 생성됩니다:

$ poetry config virtualenvs.in-project true

Poetry를 사용하여 새 프로젝트 만들기

새 Poetry 프로젝트를 만들고 핵심 구성 파일을 이해하는 주요 단계를 살펴봅시다.

새 Poetry 프로젝트 초기화

시 사용법은 일반적으로 다음 명령을 사용하여 새 프로젝트를 생성하는 것으로 시작합니다:poetry new 명령어:

$ poetry new explore-poetry $ cd explore-poetry

이 명령은 다음 파일과 디렉토리가 포함 된 explore-poetry 디렉터리를 미리 채워 놓습니다:

explore-poetry ├── pyproject.toml ├── README.md ├── explore-poetry │ └── __init__.py └── tests └── __init__.py

이 디렉토리 구조는 Python의 최상의 관행을 따릅니다:

  • pyproject.toml: 프로젝트 메타데이터와 종속성을 정의하는 주요 구성 파일
  • README.md: 프로젝트를 설명하는 문서 파일
  • explore-poetry/: 주요 패키지 코드가 포함된 소스 코드 디렉토리, __init__.py로 패키지로 만들기 위함
  • tests/: 테스트 파일을 위한 디렉터리, __init__.py를 포함하여 패키지로 만듭니다 (가능한)

pyproject.toml을 이해하기

여기서 pyproject.toml 파일은 Poetry에 의해 생성된 유일한 비어 있지 않은 파일이므로 주의 깊게 살펴봐야 합니다:

[tool.poetry] name = "explore-poetry" version = "0.1.0" description = "" authors = ["BexTuychiev <[email protected]>"] readme = "README.md" [tool.poetry.dependencies] python = "^3.8" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"

이 파일은 프로젝트 및 해당 종속성을 조율합니다. 이 파일은 Tom의 명백하고 최소한의 언어을 사용합니다. 이 언어는 PEP 518에서 Python 패키지의 표준 구성 언어로 합의되었습니다.

모든pyproject.toml 파일은 테이블이라고 불리는 섹션으로 구분됩니다. tool.poetry이나 build-system과 같이 대괄호를 사용하여 테이블을 만듭니다. Poetry는 이러한 테이블을 사용하여 종속성을 관리하거나 프로젝트 빌드 요구 사항을 처리하거나 기타 작업을 수행합니다.

다음 섹션에서 소개된 Poetry 명령을 실행하면 pyproject.toml 파일이 자동으로 업데이트됩니다.

Poetry에서 가상 환경 사용하기

이 섹션에서는 Poetry에서 설정한 후 가상 환경을 관리하는 방법에 대해 자세히 알아볼 수 있습니다. 가상 환경이 왜 중요한지, Poetry가 자동으로 처리하는 방법, 생성, 활성화, 전환과 같은 기본 명령을 다룰 수 있습니다. 또한 Poetry를 사용하여 Python 버전을 관리하는 방법도 배울 수 있습니다.

가상 환경 생성 및 활성화하기

포에트리를 처음 설치하면 poetry env list를 실행했을 때 아무 환경도 포함되어 있지 않음을 확인할 수 있는 빈 출력이 표시됩니다.:

$ poetry env list # no output

하지만 나중에 더 자세히 설명할 것인데 종속성을 추가하기 시작하면 poetry add package-name로 프로젝트를 위한 캐시 디렉토리에 자동으로 환경을 생성합니다. 예를 들어, requests를 종속성으로 추가해 봅시다:

$ poetry add requests

다음과 유사한 출력을 받아야 합니다:

Creating virtualenv explore-poetry--I9GJYUn-py3.8 in /Users/bexgboost/Library/Caches/pypoetry/virtualenvs Using version ^2.32.3 for requests Updating dependencies Resolving dependencies... (2.5s) Package operations: 5 installs, 0 updates, 0 removals - Installing certifi (2024.8.30) - Installing charset-normalizer (3.4.0) - Installing idna (3.10) - Installing urllib3 (2.2.3) - Installing requests (2.32.3) Writing lock file

첫 번째 줄은 시가 캐시 환경을 만들었다는 것을 나타냅니다. 다음 줄은 requests에 대한 종속성이 성공적으로 해결되었고, 잠금 파일이 생성되었다는 것을 알려줍니다(나중에 더 설명될 것입니다).

환경 이름에 주의하십시오: explore-poetry--I9GJYUn-py3.8. 이 이름에는 프로젝트 디렉토리 이름, 고유 ID, 그리고 환경이 사용하는 Python 버전이 포함되어 있습니다.

다음에 종속성을 추가할 때 Poetry는 자동으로 이 환경을 사용하여 패키지를 설치합니다:

$ poetry add beautifulsoup4 Using version ^4.12.3 for beautifulsoup4 Updating dependencies Resolving dependencies... (1.1s) Package operations: 2 installs, 0 updates, 0 removals - Installing soupsieve (2.6) - Installing beautifulsoup4 (4.12.3) Writing lock file

Poetry를 사용할 때 터미널에서 활성화된 Poetry 가상 환경이 표시되지 않습니다. 이 정보를 보려면 다음을 실행해야 합니다poetry env list:

$ poetry env list explore-poetry--I9GJYUn-py3.8 (Activated)

활성화된 Poetry 환경과 상호 작용하려면 다음을 실행할 수 있습니다poetry shell:

$ poetry shell

해당 명령은 현재 셸 내에서 새로운 셸 세션을 열고,python 또는 pytest와 같은 명령을 실행할 수 있습니다.

예를 들어, Python 스크립트를 실행하려면:

$ poetry shell $ python script.py

Streamlit과 같은 개발 프레임워크를 실행하려면:

# 셸 내부에서 $ streamlit run app.py

나중에는 exit를 호출하여 셸을 종료할 수 있습니다.

또는 poetry run으로 Poerty 셸에 들어가지 않고 명령을 실행할 수 있습니다.

$ poetry run python script.py $ poetry run streamlit run app.py

Python 버전 설정

실행하면 poetry add 또는 poetry install 명령을 실행하면 Poetry는 자동으로 pyproject.toml 파일에 지정된 Python 버전을 사용합니다. 다른 Python 버전을 지정하려면 env use 명령을 실행할 수 있습니다:

$ poetry env use python3.11

Python 3.11이 시스템 전체에 설치되어 있어야 명령이 작동하는 것을 확인하세요.

Poetry가 새 Python 버전을 사용하는 환경을 사용 중인지 확인하세요:

$ poetry env list explore-poetry--I9GJYUn-py3.11 (Activated) explore-poetry--I9GJYUn-py3.8

새 환경이 자동으로 프로젝트에 연결되는 것을 확인하세요 (ID가 동일함). Python 버전을 구성한 후, 다른 버전의 환경을 제거하여 디스크 공간을 확보할 수 있습니다:

$ poetry env remove python3.8

환경을 삭제할 때는 Python 버전만 지정하면 됩니다. 모든 환경을 삭제하고 처음부터 시작할 수도 있습니다:

$ poetry env remove --all

주의할 점은 --all 태그는 현재 프로젝트와 관련된 모든 환경을 제거하며, 다른 프로젝트의 환경은 제거하지 않습니다.

팀 프로젝트를 진행 중이라면, 가상 환경을 프로젝트 디렉토리에 유지하는 것이 종종 좋습니다:

$ poetry config virtualenvs.in-project true

이 명령은 이미 캐시에 프로젝트 환경이 있는 경우에는 어떤 효과도 없습니다. 로컬 환경을 생성하려면 먼저 캐시에서 모든 기존 환경을 제거해야 합니다.

이 명령은 .venv 폴더를 작업 디렉토리에 만들어, .gitignore 파일에 추가해야 합니다.

Poetry로 의존성 관리하기

의존성 관리는 Poetry의 강점입니다. 헬리쉬한 의존성 충돌을 피할 수 있도록 의존성을 명시적으로 지정하고 설치하고 관리할 수 있는 포괄적인 기능을 제공합니다.

이 섹션에서는 종속 항목을 추가하고 설치하는 방법, 종속성 그룹을 만드는 방법, pyproject.toml 및 잠금 파일의 종속성 지정 구문에 대해 배울 것입니다.

Poetry에서 종속성 추가

Poetry를 사용할 때는 poetry add package-name 명령어를 사용하여 PyPI에서 패키지를 설치합니다. 이는 pip install보다 몇 가지 이점이 있습니다:

  1. 패키지를 올바른 버전 제약 조건과 함께 pyproject.toml에 자동으로 추가합니다
  2. 재현 가능한 빌드를 보장하기 위해 잠금 파일을 업데이트합니다
  3. 충돌을 피하기 위해 종속성을 해결합니다
  4. 패키지와 그 종속성을 가상 환경에 설치합니다

예를 들어, 먼저 Numpy를 종속성으로 추가해 봅시다:

$ poetry add numpy

즉시 Numpy 버전이 Python 버전과 호환되지 않다는 종속성 해결 충돌 메시지를 받아야 합니다. 그 이유는 Python 3.11 환경으로 전환했을 때 pyproject.toml 파일을 업데이트하지 않았기 때문입니다. 현재 이 파일은 다음과 같습니다:

[tool.poetry.dependencies] python = "^3.8" requests = "^2.32.3" beautifulsoup4 = "^4.12.3"

캐럿 기호 ^explore-poetry 프로젝트가 Python 4까지의 모든 버전과 호환되지만 Numpy의 버전 범위는 3.8에서 3.12 사이의 Python 버전만 지원하므로 더 좁은 범위입니다. 충돌 오류가 이 사실에서 발생합니다.

그러므로 오류를 수정하려면 Python 버전 범위를 다음과 같이 업데이트해야 합니다:

python = ">=3.8, <3.12"

이 변경을 하면, poetry add numpy 명령이 예상대로 작동해야 합니다.

당신은 방금 Poetry의 가장 좋은 기능 중 하나를 관찰했습니다 — 패키지를 설치하기 전에 버전 충돌을 확인하는 것이 아니라, 나중에 버전 호환성에 대해 알려주는 것처럼 pip과는 달리.

의존성 버전을 지정하는 구문

시는 의존성 간의 최상의 동기화를 위해 넓은 범위의 버전을 지정하기 위한 강력한 구문을 사용합니다. 가장 자주 사용되는 기호는 다음과 같습니다:

  1. 캐럿 (^): 패치 및 마이너 업데이트를 허용하지만 주요 업데이트는 허용하지 않습니다. 예시: ^1.2.3는 1.2.3에서 1.9.9까지 업데이트를 허용하지만 2.0.0은 허용하지 않습니다.
  2. 틸드 (~): 패치 업데이트만 허용합니다. 예시: ~1.2.3는 1.2.3에서 1.2.9까지 업데이트를 허용하지만 1.3.0은 허용하지 않습니다.
  3. 정확한 버전: 정확한 버전 번호를 지정합니다. 예시: 1.2.3는 버전 1.2.3만 허용합니다.
  4. 초과 (>): 지정된 버전보다 높은 모든 버전을 허용합니다. 예시: >1.2.3는 1.2.4, 1.3.0, 2.0.0 등을 허용합니다.
  5. 작음 (<): 지정된 버전 아래의 모든 버전을 허용합니다. 예시: <2.0.0 2.0.0 미만의 모든 것을 허용합니다.
  6. 크거나 같음 (>=): 지정된 버전과 그 이상을 허용합니다. 예시: >=1.2.3 1.2.3 이상의 버전을 허용합니다.
  7. 이하 (<=): 지정된 버전 및 이하를 허용합니다. 예시: <=2.0.0는 2.0.0 및 그 이하 버전을 허용합니다.
  8. 버전 범위: 쉼표로 제약 조건을 결합합니다. 예시: >=1.2.3,<2.0.0는 1.2.3부터 1.9.9까지의 버전을 허용합니다.
  9. 와일드카드 (*): 어떤 버전과도 일치합니다. 예시: 1.2.*는 1.2로 시작하는 모든 버전과 일치합니다.

물론, 필요에 맞게 혼합하여 사용할 수 있습니다.

Poetry에서 종속성 그룹 생성

많은 이동 구성 요소가 있는 복잡한 프로젝트에서는 종속성의 다른 범주를 다루게 됩니다.

예를 들어, 머신 러닝 프로젝트에서는 데이터 수집, 데이터 정제, 피처 엔지니어링, 모델 트레이닝, 배포 및 모니터링을 위한 다양한 파이프라인과 구성 요소를 만들곤 합니다. 문서 작성 및 테스트 실행도 빼놓을 수 없죠. 이러한 모든 단계에는 각자의 도구 생태계가 있으며, 이들의 의존성을 섞으면 최종 배포 패키지가 비대해집니다.

Poetry를 사용하면 필요할 때만 의존성 그룹을 만들어 설치할 수 있습니다. 또는 더 좋은 점은 — 패키지 사용자가 필요한 부분만 선택하여 설치할 수도 있습니다.

$ poetry add --group ui streamlit plotly dash $ poetry add --group dev black flake8 isort mypy pylint

위의 명령은 두 개의 종속성 그룹을 만듭니다.uidev(이미 존재하지 않는 경우), 그리고 pyproject.toml에 두 개의 하위 테이블을 만듭니다.

[tool.poetry.dependencies] python = "^3.11" requests = "^2.32.3" beautifulsoup4 = "^4.12.3" numpy = "^2.1.3" [tool.poetry.group.ui.dependencies] streamlit = "^1.39.0" plotly = "^5.24.1" dash = "^2.18.2" [tool.poetry.group.dev.dependencies] black = "^24.10.0" flake8 = "^7.1.1" isort = "^5.13.2" mypy = "^1.13.0" pylint = "^3.3.1"

의존성 그룹이 분리되어 있더라도 서로에 대해 여전히 해결됩니다. 다시 말해, dev의존성이 ui의 패키지와 충돌하는 경우 Poetry는 설치를 실행하지 않습니다.

일부 경우에는 선택적 종속성 그룹을 만들거나 기존 그룹을 선택적으로 만들어 사용자가 프로젝트 환경을 다시 만들 때 기본적으로 설치되지 않도록 할 수 있습니다. 이를 위해 pyproject.toml 파일에 새 하위 테이블을 만들어야 합니다. 예를 들어, 다음과 같이 ui 그룹을 선택적으로 만들어보겠습니다:

[tool.poetry.group.ui] optional = true [tool.poetry.group.ui.dependencies] streamlit = "^1.39.0" plotly = "^5.24.1" dash = "^2.18.2"

그룹의 종속성을 선언하기 전에 optional 매개변수를 true로 설정하여 수행됩니다.

Poetry.lock 파일을 사용하여 Poetry 프로젝트를 재현하기

만약 누군가가 귀하의 Poetry 프로젝트를 포함하는 GitHub 저장소를 복제하면, 한 가지 명령을 실행함으로써 해당 프로젝트를 위한 가상 환경을 완벽하게 복제할 수 있습니다:poetry install.

install 명령어는 보다 포괄적인 poetry.lock 파일을 사용합니다. pyproject.toml과는 달리, 락 파일에는 다음이 포함됩니다:

  • 주요 종속성의 정확한 버전은pyproject.toml
  • 주요 종속성의 종속성(전이적 종속성)의 정확한 버전

예를 들어, requestsurllib3, certifi, charset-normalizeridna에 의존합니다. 잠금 파일이 없으면 이러한 하위 종속성들이 다른 버전으로 해결될 수 있습니다.

잠금 파일은 팀의 모든 사람이 동일한 종속성 버전을 얻도록 보장하여 “내 컴퓨터에서는 작동합니다” 문제를 방지합니다.

poetry add와 poetry install의 차이

우리는 addinstall 명령어의 사용 사례를 통해 Poetry의 차이를 설명하겠습니다.

사기 탐지 프로젝트를 진행 중이라고 가정해보겠습니다. 초기 종속성을 추가합니다:

$ poetry add pandas scikit-learn

이 명령은 패키지를 잠그고 pyproject.toml 파일에 추가합니다. 그런 다음 동료가 리포지토리를 복제합니다:

$ git clone fraud-detection-repo-link $ cd fraud-detection $ poetry install

그들은 install 명령을 실행하여 잠금 파일에 나열된 모든 것을 설치합니다.

나중에 새 패키지를 추가해야 할 때:

$ poetry add xgboost

동료가 변경 사항을 가져옵니다:

$ git pull $ poetry install

그들은 새로운 패키지를 설치하기 위해 install 명령을 실행합니다. 그래서,

  • 새로운 종속성을 추가할 때 poetry add을 사용하십시오
  • 기존 프로젝트를 설정해야 할 때 poetry install을 사용하세요
  • 항상 pyproject.tomlpoetry.lock을 버전 관리에 포함하세요

poetry install 명령을 사용하여 종속성 그룹 설치

이전에 Poetry에서 의존성을 그룹화하는 방법을 배웠습니다. poetry install을 실행하면 선택 사항이 아닌 모든 그룹이 기본적으로 설치되며, 모든 경우에 원하는 결과가 아닐 수 있습니다.

예를 들어, 문서 작업만을 위해 저장소를 복제할 수도 있습니다. 또는 문서 및 테스트 측면을 제외한 저장소의 주요 코드를 작업하고 싶을 수도 있습니다. install 명령은 이러한 모든 경우를 유연하게 다룰 수 있습니다.

특정 그룹 제외:

$ poetry install --without ui,dev

선택적 그룹 설치:

# 선택적 문서 그룹 설치 $ poetry install --with docs

특정 그룹만 설치:

$ poetry install --only ui

프로젝트의 런타임 종속성만 설치(그룹 외부에서 언급된 종속성으로, 일반적인 poetry add package 명령어를 사용):

$ poetry install --only main

Poetry에서 종속성 제거

의존성을 삭제하는 것은 간단합니다. remove 명령을 사용하면 됩니다:

$ poetry remove requests

이 명령은 requests를 주요 프로젝트 의존성에서 제거합니다. 그룹 의존성에서 패키지를 제거하려면 --group 태그를 다시 사용할 수 있습니다:

$ poetry remove streamlit --group ui

remove 명령은 패키지와 해당 종속성을 청소하게 제거합니다.

Poetry를 사용하여 PyPI에 프로젝트를 게시하는 방법

프로젝트가 배포 준비가 되었다면, PyPI(파이썬 패키지 인덱스)에 게시하여 다른 개발자들이 pip를 통해 쉽게 코드를 설치하고 사용할 수 있도록 합니다. Poetry는 이 과정을 두 개의 명령어로 완전히 간편하게 만들어줍니다:

$ poetry build # 배포 파일 빌드 $ poetry publish # PyPI에 게시

그러나 이러한 명령을 실행하기 전에 PyPI 자격 증명을 올바르게 설정해야 합니다. 먼저 다음 위치에서 계정을 만듭니다:

  1. PyPI
  2. TestPyPI

자격 증명으로 Poetry 구성:

$ poetry config pypi-token.pypi your-pypi-token $ poetry config pypi-token.testpypi your-test-pypi-token

이제 패키지를 먼저 테스트합니다:

# TestPyPI 저장소 구성 $ poetry config repositories.testpypi https://test.pypi.org/legacy/ # TestPyPI로 발행 $ poetry build $ poetry publish -r testpypi

TestPyPI에 발행한 후에 패키지를 설치하여 모든 것이 잘 작동하는지 테스트할 수 있습니다:

$ pip install --index-url https://test.pypi.org/simple/ your-package-name

모든 것이 잘 작동하면 PyPI 자체에 발행할 수 있습니다:

$ poetry publish

Poetry 작업 시 베스트 프랙티스

Poetry를 사용할 때 많은 지루한 점과 베스트 프랙티스가 있으며, 물론 단일 기사에서 모두 언급할 수는 없습니다. 그러나 즉시 적용할 수 있는 몇 가지 일반적인 것들이 여기 있습니다:

  1. 항상 가상 환경을 사용하세요 – Poetry는 각 프로젝트에 자동으로 생성합니다
  2. 파일을 버전 관리 하지만pyproject.tomlpoetry.lock는 라이브러리에서 제외하세요
  3. 버전 관리에 poetry.lock를 포함하여 애플리케이션의 재현 가능한 빌드를 보장하세요
  4. 패키지 버전에는 의미론적 버전 지정을 사용하십시오(major.minor.patch). 하나씩 패키지 버전을 올리는 데 poetry version patch/minor/major 명령을 사용할 수 있습니다. 예를 들어, poetry version major0.2.01.0.0 로 변경합니다. pyproject.toml 파일에 적용하세요.
  5. 의존성 버전 제약을 주의 깊게 지정하여 충돌을 피하세요
  6. 정기적으로 poetry update를 사용하여 의존성을 업데이트하되 업데이트 후에 철저히 테스트하세요
  7. 개발 의존성을 분리하기 위해 poetry add --group dev를 사용하세요
  8. 모든 종속 항목의 목적을 주석을 사용하여 pyproject.toml에 문서화하세요
  9. 실행 poetry check을 커밋하기 전에pyproject.toml 구문을 유효성 검사하세요. 또한 pre-commit 훅도 고려해 볼 수 있습니다.
  10. 사용 poetry export을 사용하여 requirements.txt를 다른 도구에서 필요할 때 생성하세요.
  11. 프로덕션 종속성을 최소화하고 선택적 기능을 extras로 이동하세요.
  12. 게시하기 전에 깨끗한 환경에서 패키지 설치를 테스트하세요.
  13. 메인 PyPI 저장소에 게시하기 전에 TestPyPI를 사용하세요
  14. 버전 변경 사항을 추적하기 위해 명확한 CHANGELOG.md 유지하기
  15. 올바른 환경 사용을 보장하기 위해 스크립트 실행에 poetry run 사용하기

결론 및 다음 단계

시, 일반적인 패키지 관리 도전에 대한 견고하고 직관적인 솔루션을 제공함으로써 Python 종속성 관리를 혁신했습니다. 종속성 해결, 가상 환경 관리 및 프로젝트 게시를 위한 강력한 기능은 현대적인 Python 개발에 귀중한 도구로 만듭니다.

Python 개발 여정을 계속하려면, 다음 포괄적인 학습 경로를 탐색해보시기 바랍니다:

전문적인 파이썬 개발에서 효과적인 종속성 관리는 중요한 측면 중 하나입니다. 개발자로서 성장하면서 Poetry와 같은 도구를 활용하여 유지보수 가능하고 신뢰할 수 있는 파이썬 프로젝트를 구축하는 데 도움을 받을 수 있습니다.

Source:
https://www.datacamp.com/tutorial/python-poetry